我阅读了来自One step affine transform for rotation around a point?的以下内容:
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
transform = CGAffineTransformRotate(transform, a);
transform = CGAffineTransformTranslate(transform,-x,-y);
然而,当我这样做时,转换后的图像位置错乱,很少在屏幕上正确显示。
我试过让系统放置图片。如果你运行一个循环并放置几个值,会出现一个螺旋形状。然而,虽然我可能最终能够解开图像旋转和它们所要围绕旋转的点之间的关系,但我想问一下最好的解决方案是什么:“我有一张图片;我认为这个点是它的中心;我想让它围绕它的中心旋转这么多度但不偏移其他位置。”
我正在尝试制作http://JonathansCorner.com/ancient-clock/的修改版,现在我正在尝试放置时针。所有尝试将图像按上述方法进行平移和旋转,以使其中心位于所需中心处的尝试均失败了。
对于这个钟表的指针,如何说“我希望指针在以下旋转角度”并使其正确地围绕中心放置?
--编辑--
这段代码的关键部分,为响应评论而编辑的部分,是:
UIImage *hourHandImage = [UIImage imageNamed:@"hour-hand.png"];
UIImageView *hourHandView = [[UIImageView alloc] initWithImage:hourHandImage];
float hourRotation = .5;
hourHandImage = [UIImage imageNamed:@"hour-hand.png"];
hourHandView = [[UIImageView alloc] initWithImage:hourHandImage];
CGAffineTransform transform = CGAffineTransformMakeTranslation(centerX - 21, -centerY - 121);
// transform = CGAffineTransformRotate(transform, hourRotation);
// transform = CGAffineTransformTranslate(transform, 2 * centerX, 2 * centerY);
hourHandView.transform = transform;
hourHandView.layer.anchorPoint = CGPointMake(centerX, centerY);
hourHandView.layer.affineTransform = CGAffineTransformRotate(transform, hourRotation);
[self.view addSubview:hourHandView];
谢谢,
--编辑--
现在我有了简化版的东西;如果我遵循一些指示,我就有了:
CGAffineTransform transform = CGAffineTransformMakeTranslation(100 -21, 100 -121);
transform = CGAffineTransformRotate(transform, hour / 12.0 * M_PI * 2.0);
transform = CGAffineTransformTranslate(transform, -330, 330);
hourHandView.transform = transform;
我希望能够努力将这些数字整理出来,但是现在已经正确显示了9:00的小时数。
非常感谢您的所有帮助!
x
和y
?它们应该分别是你尝试旋转的物体的边界矩形的一半宽度和高度。 - jscsa
是什么?请注意,它需要用弧度而不是角度表示。 - jscs