-
frame
1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0,0))
2> 修改这个属性,可以调整控件的位置和尺寸 -
bounds
1> 表示控件的位置和尺寸(以自己的左上角为坐标原点,位置永远是(0,0))
2> 修改这个属性,只能调整控件的位置 -
center
1> 表示控件的中点(以父控件的左上角为坐标原点)
2> 修改这个属性,可以调整控件的位置 -
tag
1> 表示控件的标识
2> 通过不同标识可以区分不同的控件 -
transform
表示控件的形变状态(旋转角度,缩放比例)
#pragma mark 控制按钮走动(上下左右)
- (IBAction)run:(id)sender{
int kDelta = 10;
[self btnClickWithBlock:^{
//1. 先取出 frame
CGRect tempFrame = _btn.frame;
//2. 取出按钮的 tag 标记
int tag = [sender tag];
switch (tag) {
case 1:
tempFrame.origin.y -= kDelta;
break;
case 2:
tempFrame.origin.x += kDelta;
break;
case 3:
tempFrame.origin.y += kDelta;
break;
case 4:
tempFrame.origin.x -= kDelta;
break;
default:
break;
}
//3. 重新赋值按钮的 frame
_btn.frame = tempFrame;
}];
}
#pragma mark 放大、缩放
- (IBAction)scale:(id)sender
{
[self btnClickWithBlock:^{
CGFloat scale = [sender tag] == 20 ? 1.2 : 0.8;
_btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
}];
}
#pragma mark 左、右旋转
- (IBAction)rotate:(id)sender
{
int tag = [sender tag];
if (10 == tag) {
_btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4 * -1);
}
else{
_btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4 * 1);
}
[self btnClickWithBlock:^{
CGFloat scale = [sender tag] == 20 ? 1.2 : 0.8;
_btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
}];
}
#pragma mark 重置
- (IBAction)reset:(id)sender
{
//清空之前所有的形变状态(清除以前的旋转、缩放等状态)
[self btnClickWithBlock:^{
_btn.transform = CGAffineTransformIdentity;
}];
}
- (void) btnClickWithBlock:(void (^)())block
{
//动画 (头部 - 开始动画)
[UIView beginAnimations:nil context:nil];
//设置动画的执行时间
[UIView setAnimationDuration:1.0];
//调用 block
block();
//动画 (尾部 - 提交动画 - 执行动画)
[UIView commitAnimations];
}