我设置了以下视图:
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 时短暂出现。任何关于为什么我无法得到正确观点的帮助将不胜感激,谢谢。
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];