3

我需要围绕一个固定点旋转 UIView。

bubbleTail = [[BubbleTail alloc] initWithFrame:bubbleTailFrame];
[self addSubview:bubbleTail];
bubbleTail.layer.anchorPoint = triangle_top_left;
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI * 180 / 180.0);
bubbleTail.transform = transform;

这仅在我评论 .anchorPoint 行时才有效。如何围绕视图内的一个点旋转视图?

4

2 回答 2

2

下面应该有帮助。棘手的部分是在添加带有框架的视图之后设置锚点,然后移动视图。我通过在没有框架的情况下启动 UIView,然后设置其层的位置、边界和锚点来解决这个问题。然后我使用旋转围绕锚点旋转。

CABasicAnimation *rotation;
rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotation.fromValue = [NSNumber numberWithFloat:0];
rotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
rotation.duration = 60.0;
rotation.repeatCount = HUGE_VALF;

UIView *myview = [[UIView alloc] init];
[self.view addSubview:myview];
[myview setBackgroundColor:[UIColor orangeColor]]; 
[myview.layer setPosition:CGPointMake(10, 10)];
[myview.layer setBounds:CGRectMake(0, 0, 100, 100)];
[myview.layer setAnchorPoint:CGPointMake(0, 0)];
[myview.layer addAnimation:rotation forKey:@"myAnimation"];

如果这不是最好的方法或有错误,请有人纠正我——我只知道我目前知道的——例如,我什么时候应该使用 . 或 f 浮动后。

于 2013-05-23T10:28:14.507 回答
0

所以它似乎CGAffineTransformMakeRotation围绕center视图旋转它?

假设您有P (px,py)观点,您希望围绕该观点旋转视图。
让我们A(ax,ay)= P- center= (px - centerx, py - centery)。
你有角度alpha

然后你可以用 制作一个平移矩阵- A,然后用旋转矩阵乘以alpha,然后用平移矩阵乘以+ A

您需要的功能是:CGAffineTransformMakeTranslationCGAffineTransformMakeRotationCGAffineTransformConcat

PS不确定这是否可行(也不确定如何表示视图矩形,也许它首先假设围绕中心旋转是错误的,然后你应该假设A = P),但这就是仿射变换的方式。

于 2013-05-23T07:25:18.303 回答