iOS 围绕某点转动(锚点)动画

开发中有这样的需求:

iOS 围绕某点转动(锚点)动画_第1张图片
最终动画.gif

这是围绕右下角转动的动画

1.点击按钮围绕锚点转动:

- (void)buttondddd:(UIButton *)sender {
    sender.selected = !sender.selected;
    self.veiew.layer.anchorPoint = CGPointMake(1, 1);
    self.veiew.transform = CGAffineTransformMakeRotation(M_PI * 0.15 * sender.selected);
}

效果如下:

iOS 围绕某点转动(锚点)动画_第2张图片
未计算锚点.gif

2.发现改变了锚点,frame也变了,在网上找了篇文章,(这里)找到了计算公式
更改代码

- (void)buttondddd:(UIButton *)sender {
     sender.selected = !sender.selected;
     CGPoint oldOrigin = self.veiew.frame.origin;
     self.veiew.layer.anchorPoint = CGPointMake(1, 1);
     CGPoint newOrigin = self.veiew.frame.origin;
    
    CGPoint transition;
    transition.x = newOrigin.x - oldOrigin.x;
    transition.y = newOrigin.y - oldOrigin.y;
    
    self.veiew.center = CGPointMake (self.veiew.center.x -         transition.x, self.veiew.center.y - transition.y);
    self.veiew.transform = CGAffineTransformMakeRotation(M_PI * 0.15 * sender.selected);
}

效果如下

iOS 围绕某点转动(锚点)动画_第3张图片
中间动画.gif

发现动画很生硬

3.加个动画过程

- (void)buttondddd:(UIButton *)sender {
    sender.selected = !sender.selected;
    CGPoint oldOrigin = self.veiew.frame.origin;
    self.veiew.layer.anchorPoint = CGPointMake(1, 1);
    CGPoint newOrigin = self.veiew.frame.origin;
    
    CGPoint transition;
    transition.x = newOrigin.x - oldOrigin.x;
    transition.y = newOrigin.y - oldOrigin.y;
    
    self.veiew.center = CGPointMake (self.veiew.center.transition.x, slf.veiew.center.y - transition.y);
    
    [UIView animateWithDuration:.3 animations:^{
        self.veiew.transform = CGAffineTransformMakeRotation(M_PI * 0.15 * sender.selected);
    }];
}

最终效果

iOS 围绕某点转动(锚点)动画_第4张图片
最终动画.gif

你可能感兴趣的:(iOS 围绕某点转动(锚点)动画)