OC- transform相关

本文介绍如何使用Core Graphics和Core Animation实现视图的基本变换,包括位移、缩放和旋转等,并深入探讨3D效果的实现方法,如绕坐标轴旋转、透视投影及动态旋转动画。

一、基础

//位移(不累加)

self.headImageView.transform=CGAffineTransformMakeTranslation(50, 200);

//缩放

self.headImageView.transform=CGAffineTransformMakeScale(1.2, 10);

//在原有的基础上位移(是累加的)

self.headImageView.transform=CGAffineTransformTranslate(self.headImageView.transform, 50, 50);

//在原有的基础上进行旋转

self.headImageView.transform=CGAffineTransformRotate(self.headImageView.transform,M_1_PI);


二、扩展 3D

#import <QuartzCore/QuartzCore.h>

//绕坐标轴旋转:参数 angle x y z

self.imageView.layer.transform = CATransform3DMakeRotation(M_PI/6, 1, 0, 0);


//透视

#import "CATransform3DPerspect.h"

//y方向

CATransform3D rotate = CATransform3DMakeRotation(M_PI/6, 0, 1, 0);

            image.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 200);

//旋转动画

 _animTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update) userInfo:nil repeats:YES];


- (void)update

{

    static float angle = 0;

    angle += 0.05f;

    

    CATransform3D transloate = CATransform3DMakeTranslation(0, 0, -200);

    CATransform3D rotate = CATransform3DMakeRotation(angle, 0, 1, 0);

    CATransform3D mat = CATransform3DConcat(rotate, transloate);

    image.layer.transform = CATransform3DPerspect(mat, CGPointMake(0, 0), 500);

}



附件:CATransform3DPerspect.h 内容


.h

#ifndef IOS_3D_UI_CATransform3DPerspect_h

#define IOS_3D_UI_CATransform3DPerspect_h


/**

 *  构造CALayer的透视投影矩阵

 *  center : 相机相对于CALayer的平面位置

 *  disZ   : 相机与z=0投影平面的距离

 */


CATransform3D CATransform3DMakePerspective(CGPoint center, float disZ);

CATransform3D CATransform3DPerspect(CATransform3D t, CGPoint center, float disZ);


#endif


.m

#import <QuartzCore/QuartzCore.h>

#import "CATransform3DPerspect.h"


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));

}



参考来源:文丁丁,wordmatrix



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值