如何多次围绕锚点旋转视图

Posted

技术标签:

【中文标题】如何多次围绕锚点旋转视图【英文标题】:How to rotate view around anchor point multiple times 【发布时间】:2011-03-15 03:06:16 【问题描述】:

我真的被旋转视图时遇到的问题难住了。我试图让几个视图围绕任意点旋转(如触摸)。

首先,没有充分解释(相信我的话)我只想说,由于我的视图布局和我需要完成的复杂性,“作弊”方法,因为它有时是调用,在其中添加所有需要旋转到更大视图并旋转该视图的视图,对我不起作用。

我正在更改图层的锚点,以便我的视图将围绕双击点旋转。然而,一些我无法弄清楚的事情一直让我陷入困境。当我将它旋转一次(比如 90º),然后再次旋转 90º,而不是以 180º(您所期望的)结束时,我以 270º(或其他一些奇怪的数字)结束。

我将尝试发布足够多的代码,以便您可以看到我在说什么(希望能帮助我)。

我在 .h 中声明了一个实例变量

UIView *theView;

这是 .m(您需要导入 QuartzCore 框架)

- (void)viewDidLoad 
    [super viewDidLoad];

    theView = [[UIView alloc]initWithFrame:CGRectMake(140, 40, 40, 40)];
    theView.backgroundColor = [UIColor blueColor];

    [self.view addSubview:theView];



#define DegreesToRadians(x) ((x) * M_PI / 180.0)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    UITouch *touch = [touches anyObject];

    CGPoint touchLocation = [touch locationInView:self.view];

    if ([touch tapCount]==2) 

        CGFloat xValue = ((touchLocation.x - theView.frame.origin.x)/theView.frame.size.width);
        CGFloat yValue = ((touchLocation.y - theView.frame.origin.y)/theView.frame.size.height);

      CGRect priorRect = theView.frame;
        theView.layer.anchorPoint = CGPointMake(xValue, yValue);
        theView.frame = priorRect;

        static float rotationValue = 0.0f;
        rotationValue += 90.0f;

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1.0f];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        theView.transform = CGAffineTransformRotate(theView.transform, DegreesToRadians(rotationValue));
        [UIView commitAnimations];

    

我已经尝试过所有我能想到的不同配置,所以这个例子就是我拼凑起来的,因为它看起来很简洁。无论如何,请帮助我!!!

【问题讨论】:

【参考方案1】:

需要适当设置锚点。

Setting anchor point for UIView layer

如果您只想一次点击旋转 90 度,则不要聚合旋转,它的旋转值应始终为 90 度。

如果您希望它每次旋转更大的量,那么您会遇到跳跃问题,因此您应该查看以下链接以了解如何正确执行此操作。

rotate a UIView around its center but several times

【讨论】:

我阅读了所提供链接中的所有帖子。这仍然没有解决我遇到的问题。没有人尝试过提供的代码吗?您可以快速看到发生了什么。 测试了代码,发现锚点设置不正确。添加了指向处理该问题的问题的链接。 “奇怪”的角度问题在某种程度上仍然存在,并在第二个链接中解决。

以上是关于如何多次围绕锚点旋转视图的主要内容,如果未能解决你的问题,请参考以下文章

如何围绕指定的锚点旋转 2D 容器小部件?

shouldAutorotateToInterfaceOrientation 连续调用多次,没有任何旋转

映射在视图上的函数列表 - 视图是不是被多次遍历?

1.04 锚点

ScrollView 和 ImageView - 多次设备旋转后图像未居中

jQuery:将href推送到另一个锚点,多次并分别