iOS绕X轴旋转

没有近大远小的效果

- (void)downAnimation {
    _photoImageView.layer.transform = CATransform3DMakeRotation(0, 1, 0, 0);
    
    [UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionRepeat animations:^{
        _photoImageView.layer.transform = CATransform3DMakeRotation(M_PI / 4, 1, 0, 0);
    } completion:^(BOOL finished) {
        _photoImageView.layer.transform = CATransform3DMakeRotation(0, 1, 0, 0);
    }];
}

实现近大远小效果

- (void)downAnimation {
    CATransform3D rotate = CATransform3DMakeRotation(0, 1, 0, 0); //角度,X轴,Y轴,Z轴
    _photoImageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 120);
    
    [UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionRepeat animations:^{
        CATransform3D rotate = CATransform3DMakeRotation(M_PI / 4, 1, 0, 0);
        _photoImageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 120);
    } completion:^(BOOL finished) {
        CATransform3D rotate = CATransform3DMakeRotation(0, 1, 0, 0);
        _photoImageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 120);
    }];
}

- (void)upAnimation {
    CATransform3D rotate = CATransform3DMakeRotation(M_PI / 4, 1, 0, 0);
    _photoImageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 120);
    
    [UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionRepeat animations:^{
        CATransform3D rotate = CATransform3DMakeRotation(0, 1, 0, 0);
        _photoImageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 120);
    } completion:^(BOOL finished) {
        CATransform3D rotate = CATransform3DMakeRotation(M_PI / 4, 1, 0, 0);
        _photoImageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 120);
    }];
}

- (void)endAnimation {
    [_photoImageView.layer removeAllAnimations];
}
//disZ,表示观察者到投射面的距离,值越小,近大远小效果越明显
CATransform3D CATransform3DMakePerspective(CGPoint center, float disZ)
{
    CATransform3D transToCenter = CATransform3DMakeTranslation(-center.x, -center.y, 0);
    CATransform3D transBack = CATransform3DMakeTranslation(center.x, center.y, 0);
    CATransform3D scale = CATransform3DIdentity;
    scale.m34 = -1.0f/disZ;
    return CATransform3DConcat(CATransform3DConcat(transToCenter, scale), transBack);
}

CATransform3D CATransform3DPerspect(CATransform3D t, CGPoint center, float disZ)
{
    return CATransform3DConcat(t, CATransform3DMakePerspective(center, disZ));
}

向上.gif
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ## title one * sf * sd * sds
    听音乐的木头阅读 334评论 0 1
  • 这一周是我最混乱的一周。先生出差、妈妈生病、紧急活动……简直应接不暇。第一次发现公主当久了,很多事情处理起来很吃力...
    玫瑰天空阅读 145评论 0 0
  • 我是日记星球239号星宝宝,来自深圳的叶子。我相信日积月累的力量,积跬步以致千里!这是第204篇日记。 这几天深圳...
    水晶妈咪阅读 166评论 0 0
  • 456
    若是如风阅读 106评论 0 0
  • 三观正的标准:(微博上看的分享) 1一个人的认知结构在逻辑上大体自恰; 2原则上不太和现代文明(平等自由等)抵触;...
    三不主义阅读 397评论 0 1