使用 (0, .5) 锚点转换旋转视图上的点时遇到问题

问题描述 投票:0回答:1

我设置了以下视图:

V3 的锚点是 (0, .5),它可以通过附加到 V4 的 UIPanGestureRecognizer 进行旋转。我正在尝试将 V4 上的点转换为 V1 坐标空间(这样我可以将出现在 V4 中心上方的子视图附加到 V1),但无法将其正确放置。我有以下代码:

CGSize targetImageViewSize = CGSizeMake(v4.frame.size.width / 2, v4.frame.size.height / 2);
//find the point that will place the target in the center of v4 when attached as a subview to v1 (i.e. in its center)
CGPoint convertedTargetImageViewOrigin = [v1 convertPoint:CGPointMake((v4.frame.size.width - targetImageViewSize.width) / 2, (v4.frame.size.height - targetImageViewSize.height) / 2) fromView:v4];
UIImageView *targetImageView = [[UIImageView alloc] initWithFrame:CGRectMake(convertedTargetImageViewOrigin.x, convertedTargetImageViewOrigin.y, targetImageViewSize.width, targetImageViewSize.height)];
targetImageView.image = [UIImage imageNamed:@"TargetIcon"];
targetImageView.transform = CGAffineTransformMakeRotation(v3.degreesRotated);
[v1 addSubview:targetImageView];

我也尝试过旋转点但无济于事:

convertedTargetImageViewOrigin = CGPointApplyAffineTransform(convertedTargetImageViewOrigin, CGAffineTransformMakeRotation(v3.degreesRotated));

需要明确的是,当用户旋转时,我不会让该目标出现在 v4 上,而只是在用户点击 v1 时短暂出现。任何关于为什么我无法得到正确观点的帮助将不胜感激,谢谢。

ios objective-c uiview cgpoint
1个回答
0
投票

HangarRash 建议我使用

v4
center
属性而不是手动计算原点,为我指明了正确的方向。之后,我只需要在使用
v4
时调整
center
v3
属性是根据
convertPoint:fromView
的坐标空间,然后就成功了!

CGSize targetImageViewSize = CGSizeMake(v4.frame.size.width / 2, v4.frame.size.height / 2);
CGPoint targetImageViewCenter = v4.center;
CGPoint convertedTargetImageViewCenter = [v1 convertPoint:targetImageViewCenter fromView:v3];

UIImageView *targetImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, targetImageViewSize.width, targetImageViewSize.height)];
targetImageView.image = [UIImage imageNamed:@"TargetIcon"];
targetImageView.center = convertedTargetImageViewCenter;
[self.targetImageViews addObject:targetImageView];
targetImageView.transform = CGAffineTransformMakeRotation(v3.angle);
[v1 addSubview: targetImageView];
© www.soinside.com 2019 - 2024. All rights reserved.