ios开发之3D效果(一)
2015-08-25 15:59
621 查看
1.CATransform是加载在view的layer上的。
实现普通的放大,缩小,旋转等可用:
imageView.layer.transform = CATransform3DMakeRotation(M_PI/6, 0, 1, 0);
2.实现近大远小的立体效果先定义两个方法:(我是另建一个头文件实现的)
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));
}
3.在自定义方法的基础上,定义一个计时器。
@interface ViewController ()
{
UIImageView *imageView;
UIImageView *imageView1;
UIImageView *imageView2;
UIImageView *imageView3;
NSTimer *timer;
}
- (void)viewDidLoad {
[super viewDidLoad];
imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView.image = [UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView];
imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView1.image =
[UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView1];
imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView2.image =
[UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView2];
imageView3 = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView3.image =
[UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView3];
//绕Z轴旋转:默认使用正交投影,没有近大远小
//imageView.layer.transform = CATransform3DMakeRotation(M_PI/6, 0, 1, 0);
//CATransform3D rotate = CATransform3DMakeRotation(M_PI/6, 0, 1, 0);
//imageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 200);
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:selfselector:@selector(update) userInfo:nil repeats:YES];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)update
{
//static float angle= 0;
//angle+=0.05;
//
//CATransform3D transloate = CATransform3DMakeTranslation(0, 0, -200);
//CATransform3D rotate = CATransform3DMakeRotation(angle, 0, 1, 0);
//CATransform3D mat = CATransform3DConcat(rotate, transloate);
//imageView.layer.transform = CATransform3DPerspect(mat, CGPointMake(0, 0), 500);
static float angle= 0;
angle+=0.05;
CATransform3D move = CATransform3DMakeTranslation(0, 0, 160);
CATransform3D back = CATransform3DMakeTranslation(0, 0,
-160);
CATransform3D rotate0 = CATransform3DMakeRotation(-angle, 0, 1, 0);
CATransform3D rotate1 = CATransform3DMakeRotation(M_PI_2-angle, 0, 1, 0);
CATransform3D rotate2 = CATransform3DMakeRotation(M_PI_2*2-angle, 0, 1, 0);
CATransform3D rotate3 = CATransform3DMakeRotation(M_PI_2*3-angle, 0, 1, 0);
CATransform3D mat0 = CATransform3DConcat(CATransform3DConcat(move,
rotate0), back);
CATransform3D mat1 = CATransform3DConcat(CATransform3DConcat(move,
rotate1), back);
CATransform3D mat2 = CATransform3DConcat(CATransform3DConcat(move,
rotate2), back);
CATransform3D mat3 = CATransform3DConcat(CATransform3DConcat(move,
rotate3), back);
imageView.layer.transform = CATransform3DPerspect(mat0, CGPointZero, 500);
imageView1.layer.transform = CATransform3DPerspect(mat1, CGPointZero, 500);
imageView2.layer.transform = CATransform3DPerspect(mat2, CGPointZero, 500);
imageView3.layer.transform = CATransform3DPerspect(mat3, CGPointZero, 500);
}
4.加上一个公式,以后可以参考
[/code]
[/code]
[/code]
参考网址:
http://blog.sina.com.cn/s/blog_8f5097be0101b91z.html
http://blog.sina.com.cn/s/blog_71715bf801019ut9.html
实现普通的放大,缩小,旋转等可用:
imageView.layer.transform = CATransform3DMakeRotation(M_PI/6, 0, 1, 0);
2.实现近大远小的立体效果先定义两个方法:(我是另建一个头文件实现的)
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));
}
3.在自定义方法的基础上,定义一个计时器。
@interface ViewController ()
{
UIImageView *imageView;
UIImageView *imageView1;
UIImageView *imageView2;
UIImageView *imageView3;
NSTimer *timer;
}
- (void)viewDidLoad {
[super viewDidLoad];
imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView.image = [UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView];
imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView1.image =
[UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView1];
imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView2.image =
[UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView2];
imageView3 = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 329, 220)];
imageView3.image =
[UIImage imageNamed:@"image1.png"];
[self.view addSubview:imageView3];
//绕Z轴旋转:默认使用正交投影,没有近大远小
//imageView.layer.transform = CATransform3DMakeRotation(M_PI/6, 0, 1, 0);
//CATransform3D rotate = CATransform3DMakeRotation(M_PI/6, 0, 1, 0);
//imageView.layer.transform = CATransform3DPerspect(rotate, CGPointMake(0, 0), 200);
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:selfselector:@selector(update) userInfo:nil repeats:YES];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)update
{
//static float angle= 0;
//angle+=0.05;
//
//CATransform3D transloate = CATransform3DMakeTranslation(0, 0, -200);
//CATransform3D rotate = CATransform3DMakeRotation(angle, 0, 1, 0);
//CATransform3D mat = CATransform3DConcat(rotate, transloate);
//imageView.layer.transform = CATransform3DPerspect(mat, CGPointMake(0, 0), 500);
static float angle= 0;
angle+=0.05;
CATransform3D move = CATransform3DMakeTranslation(0, 0, 160);
CATransform3D back = CATransform3DMakeTranslation(0, 0,
-160);
CATransform3D rotate0 = CATransform3DMakeRotation(-angle, 0, 1, 0);
CATransform3D rotate1 = CATransform3DMakeRotation(M_PI_2-angle, 0, 1, 0);
CATransform3D rotate2 = CATransform3DMakeRotation(M_PI_2*2-angle, 0, 1, 0);
CATransform3D rotate3 = CATransform3DMakeRotation(M_PI_2*3-angle, 0, 1, 0);
CATransform3D mat0 = CATransform3DConcat(CATransform3DConcat(move,
rotate0), back);
CATransform3D mat1 = CATransform3DConcat(CATransform3DConcat(move,
rotate1), back);
CATransform3D mat2 = CATransform3DConcat(CATransform3DConcat(move,
rotate2), back);
CATransform3D mat3 = CATransform3DConcat(CATransform3DConcat(move,
rotate3), back);
imageView.layer.transform = CATransform3DPerspect(mat0, CGPointZero, 500);
imageView1.layer.transform = CATransform3DPerspect(mat1, CGPointZero, 500);
imageView2.layer.transform = CATransform3DPerspect(mat2, CGPointZero, 500);
imageView3.layer.transform = CATransform3DPerspect(mat3, CGPointZero, 500);
}
4.加上一个公式,以后可以参考
struct
CATransform3D
{
CGFloat m11(x缩放),m12(y切变),m13(旋转), [code]m14();
[/code]
CGFloat m21(x切变), m22(y缩放), [code]m23(),m24();
[/code]
CGFloat m31(旋转), m32( ), [code]m33(),
m34(透视效果,要操作的这个对象要有旋转的角度,否则没有效果。正直/负值都有意义);
[/code]
CGFloat m41(x平移),m42(y平移),[code]m43(z平移), m44();[/code]
};
参考网址:
http://blog.sina.com.cn/s/blog_8f5097be0101b91z.html
http://blog.sina.com.cn/s/blog_71715bf801019ut9.html
相关文章推荐
- iOS之旅--隐藏(去除)导航栏底部横线
- iOS之旅--工具Reveal的使用
- iOS URL缩短
- iOS利用通知(NSNotification)进行传值
- IOS 学习 日期选择器
- IOS 学习 TableView
- IOS 学习 gei post 同步 异步方法
- ios手势操作,四个基本事件与六个常用事件
- IOS 学习 多线程
- iOS 证书
- IOS 学习 自动换行与去除分割线
- IOS银行卡合法性校验
- iOS开发之构建Widget
- IOS 学习 创建主TabBar
- IOS 学习 创建表格的方法
- iOS利用通知(NSNotification)进行传值
- IOS 学习 模型初始化的方法
- IOS 学习 执行动画
- iOS 7 viewcontroller新增属性automaticallyAdjustsScrollViewInsets
- [iOS] #运行时编程# Block植入