#import "ViewController.h" #define kDelta 60 @interface ViewController () @end @implementation ViewController #pragma mark 封装动画效果的代码
- (void)btnClickWithBlock:(void (^)())block
{
// 实现动画(渐进变化)
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0]; block(); [UIView commitAnimations];
} // CGAffineTransform transform
// 表示空间的形变状态(旋转角度、缩放比例)
#pragma mark 还原为原始状态
- (IBAction)reset:(id)sender { [self btnClickWithBlock:^{
_btn.transform = CGAffineTransformIdentity;
}];
} #pragma mark 控制按钮的左右旋转
- (IBAction)rotate:(id)sender {
// tag可以用来区分控件
[self btnClickWithBlock:^{
CGFloat angle = [sender tag]== ? -M_PI_4 : M_PI_4;
_btn.transform = CGAffineTransformRotate(_btn.transform, angle);
}];
} #pragma mark 控制按钮的左右上下移动
- (IBAction)run:(id)sender { [self btnClickWithBlock:^{
CGRect imageFrame = _btn.frame;
NSInteger tag = [sender tag];
switch (tag) {
case :
imageFrame.origin.y -= kDelta;
break;
case :
imageFrame.origin.x += kDelta;
break;
case :
imageFrame.origin.y += kDelta;
break;
case :
imageFrame.origin.x -= kDelta;
break; default:
break;
}
_btn.frame = imageFrame;
}];
} #pragma mark 控制按钮的缩放
- (IBAction)zoom:(id)sender { [self btnClickWithBlock:^{
CGFloat scale = [sender tag]== ? 1.2 : 0.8;
_btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
}];
}
@end
主要运用的知识点:
控件的属性:
1.frame
1)标识控件的位置和尺寸(以父控件的左上角为坐标原点)
2)修改这个属性,可以调整控件的位置和尺寸
2.center
1)表示控件的中点(以父控件的左上角为坐标原点)
2)修改这个属性,可以调整控件的位置
3.bounds
1)表示控件的位置和尺寸(以自己的左上角为坐标原点,位置永远是(0,0))
2)修改这个属性,只能调整控件的尺寸
4.tag
1)表示控件的标识
2)通过不同标识可以区分不同的控件
5.transform
1)表示控件的形变状态(旋转角度、缩放比例)
a)CGAffineTransformRotate:旋转角度
b)CGAffineTransformScale:缩放尺寸大小
c)还原操作:CGAffineTransformIdentity
2)创建CGAffineTransform的函数
* CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
创建一个x、y方向的缩放比例分别为sx、sy的形变值
* CGAffineTransformMakeRotation(CGFloat angle)
创建一个旋转角度为angle的形变值,注意角度值为弧度制
* CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
在形变值t的基础上,再进行缩放,x、y方向的缩放比例分别为sx、sy,然后返回一个新的形变值
* CGAffineTansformRotate(CGAffineTransform t, CGFloat angle)
在形变值t的基础上,再进行旋转,旋转角度为angle,然后返回一个新的形变值
6)block的简单运用
7)动画效果的实现
参见代码
界面效果图: