iOS简单动画
2016-08-08 本文已影响83人
三岁就很乖
1、CGAffineTransformMakeTranslation
[UIView animateWithDuration:0.3 animations:^{
// _machinistBtn.transform = CGAffineTransformMakeTranslation(-ScreenViewW, self.transform.ty);
// _otherBtn.transform = CGAffineTransformMakeTranslation(-ScreenViewW, self.transform.ty);
// _bgView.transform = CGAffineTransformMakeTranslation(-ScreenViewW, self.transform.ty);
_btn.transform = CGAffineTransformMakeTranslation(-50, 0);
} completion:nil];
CGAffineTransformMakeTranslation(<#CGFloat tx#>, <#CGFloat ty#>)
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(50, 0, 50, 50)];
这里主要看btn
的frame
的位置是(50,0),它的center
是(75,0)
执行
[UIView animateWithDuration:0.3 animations:^{
btn.transform = CGAffineTransformMakeTranslation(-50, 0);
} completion:nil];
注意: (-50,0)
,它是一个向量,换句话说,在调用CGAffineTransformMakeTranslation(x,y)
的时候,已经把(75,0)
作为(绝对)原点,那么移动后终点应该是(25,0)
,这时候btn
的frame
为(25,0,50,50)
2、少一个 Make
,CGAffineTransformMakeTranslation(x,y)
变成CGAffineTransformTranslation(trans,x,y)
,多了一个参数其实都一样,为什么这么说,CGAffineTransformTranslation(trans,x,y)
中的trans
是给这个方法指定了一个相对原点,比如这样调用
UIButton *tmpBtn2 = [[UIButton alloc] initWithFrame:CGRectMake(0, 200, 120, 40)];
tmpBtn2.transform = CGAffineTransformTranslation(CGAffineTransformMakeTranslation(160, 0),20,0),
tmpBtn2先移动向量(160,0),在移动(20,0)。
所以CGAffineTransformTranslation(CGAffineTransformMakeTranslation(160, 0),20,0) == CGAffineTransformMakeTranslation(180, 0) 是ture的。
同理可以的出来CGAffineTransformMakeScale和CGAffineTransformScale、还有CGAffineTransformMakeRotation和CGAffineTransformRotation是一样的道理。
UIButton *tmpBtn3 = [[UIButton alloc] initWithFrame:CGRectMake(0, 200, 120, 40)];
tmpBtn3.transform = CGAffineTransformMakeScale(2,2); 大小变成 240*80
UIButton *tmpBtn4 = [[UIButton alloc] initWithFrame:CGRectMake(0, 200, 120, 40)];
tmpBtn4.transform = CGAffineTransformScale(CGAffineTransformMakeScale(2,2),2,2);
tmpBtn4认为(2,2)的frame大小(即240*80),是放大倍数的标准,所以就会放大4倍。
3、CGAffineTransformIdentity
CGAffineTransformIdentity
:清空所有的设置的transform
(一般和动画配合使用,只能使用于transform
设置的画面)