美文网首页iOS小知识点好东西
iOS 围绕某点转动(锚点)动画

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

作者: RhythmMaster | 来源:发表于2017-05-05 17:17 被阅读1217次

开发中有这样的需求:

最终动画.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);
}

效果如下:

未计算锚点.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);
}

效果如下

中间动画.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);
    }];
}

最终效果

最终动画.gif

相关文章

网友评论

本文标题:iOS 围绕某点转动(锚点)动画

本文链接:https://www.haomeiwen.com/subject/itdstxtx.html