ios开发之UI基础--transframe属性
2015-09-01 23:24
447 查看
1. transform属性
在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度
常用的创建transform结构体方法分两大类
(1) 创建“基于控件初始位置”的形变
CGAffineTransformMakeTranslation(平移)
CGAffineTransformMakeScale(缩放)
CGAffineTransformMakeRotation(旋转)
(2) 创建“基于transform参数”的形变
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
补充:
在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI
正数表示顺时针旋转
负数表示逆时针旋转
提示:由于transform属性可以基于控件的上一次的状态进行叠加形变,例如,先旋转再平移。因此在实际动画开发中,当涉及位置、尺寸形变效果时,大多修改控件的transform属性,而不是frame、bounds、center 。
示例代码:
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *button;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
// 平移
- (IBAction)trasnlate:(id)sender {
// 一次性的移动10 的距离
// _button.transform = CGAffineTransformMakeTranslation(10, 0);
// 如果想要持续移动,那么就需要得到当前view的transform
// 1. 获取当前button的transform属性
CGAffineTransform transform = _button.transform;
// 2. 在transform的基础上进行修改
_button.transform = CGAffineTransformTranslate(transform, 10, 0);
}
// 缩放
- (IBAction)scal:(id)sender {
// 执行缩放
// _button.transform = CGAffineTransformMakeScale(0.5, 0.5);
// 持续执行缩放
// 1. 获取当前button的transform
CGAffineTransform transform = _button.transform;
// 2. 在transform进行修改
_button.transform = CGAffineTransformScale(transform, 0.5, 0.5);
}
// 旋转
- (IBAction)rotate:(id)sender {
// _button.transform = CGAffineTransformMakeRotation(M_PI_4);
[UIView animateWithDuration:1 animations:^{
// 1. 获取当前button的transform
CGAffineTransform transform = self.button.transform;
// 2. 在transform进行修改
self.button.transform = CGAffineTransformRotate(transform, M_PI_4);
self.button.transform = CGAffineTransformTranslate(transform, 30, 0);
self.button.transform = CGAffineTransformScale(transform, 1.5, 1.5);
}];
}
- (IBAction)reset:(id)sender {
// 恢复原始状态
_button.transform = CGAffineTransformIdentity;
}
@end
在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度
常用的创建transform结构体方法分两大类
(1) 创建“基于控件初始位置”的形变
CGAffineTransformMakeTranslation(平移)
CGAffineTransformMakeScale(缩放)
CGAffineTransformMakeRotation(旋转)
(2) 创建“基于transform参数”的形变
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
补充:
在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI
正数表示顺时针旋转
负数表示逆时针旋转
提示:由于transform属性可以基于控件的上一次的状态进行叠加形变,例如,先旋转再平移。因此在实际动画开发中,当涉及位置、尺寸形变效果时,大多修改控件的transform属性,而不是frame、bounds、center 。
示例代码:
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *button;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
// 平移
- (IBAction)trasnlate:(id)sender {
// 一次性的移动10 的距离
// _button.transform = CGAffineTransformMakeTranslation(10, 0);
// 如果想要持续移动,那么就需要得到当前view的transform
// 1. 获取当前button的transform属性
CGAffineTransform transform = _button.transform;
// 2. 在transform的基础上进行修改
_button.transform = CGAffineTransformTranslate(transform, 10, 0);
}
// 缩放
- (IBAction)scal:(id)sender {
// 执行缩放
// _button.transform = CGAffineTransformMakeScale(0.5, 0.5);
// 持续执行缩放
// 1. 获取当前button的transform
CGAffineTransform transform = _button.transform;
// 2. 在transform进行修改
_button.transform = CGAffineTransformScale(transform, 0.5, 0.5);
}
// 旋转
- (IBAction)rotate:(id)sender {
// _button.transform = CGAffineTransformMakeRotation(M_PI_4);
[UIView animateWithDuration:1 animations:^{
// 1. 获取当前button的transform
CGAffineTransform transform = self.button.transform;
// 2. 在transform进行修改
self.button.transform = CGAffineTransformRotate(transform, M_PI_4);
self.button.transform = CGAffineTransformTranslate(transform, 30, 0);
self.button.transform = CGAffineTransformScale(transform, 1.5, 1.5);
}];
}
- (IBAction)reset:(id)sender {
// 恢复原始状态
_button.transform = CGAffineTransformIdentity;
}
@end
相关文章推荐
- LeetCode_DP_Unique Paths
- Android开发自定义UI组件
- iOS开发之UI基础--纯代码控件.frame,center,bounds属性
- 【转】C# string和StringBuilder的区别
- iOS开发之UI基础--Button基础
- UVA 11324 The Largest Clique (强连通分量,dp)
- pta 01-复杂度2 Maximum Subsequence Sum (25分)
- pta 01-复杂度2 Maximum Subsequence Sum (25分)
- UITableView小结
- HDU 3998 Sequence 最大流 isap 加 dp
- leetcode 232 Implement Queue using Stacks
- 部署Mirantis OpenStack与Fuel的系统配置要求说明
- iOS 在UILabel显示不同的字体和颜色
- 图片拉伸通常我们开发中将其写到UIImage的分类中使用,下面可以直接复制使用
- UIday0703:用 UIScrollView 和 UIPageControl 实现轮播图
- UI多线程编程小练习--卖票系统
- UIday0702:用 UIScrollView 和 UIPageControl 实现引导图
- hdu 2818 Building Block (带权并查集,很优美的题目)
- 将UIView加载成WevView(不懂的可以留言)
- UI中常用的4种传值