一、基础
//位移(不累加)
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);
}
.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));
}

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

1390

被折叠的 条评论
为什么被折叠?



