注意事项:
(1)图片如果是png格式的话,在代码中可以省略后缀。
(2)可以给控件一个tag值,然后用viewWithTag获取这个控件。
(3)transform的上下左右移动是按照它的上下左右边框垂直的方向移动的,即如果你把控件旋转了,那么上下左右就不是传统的上下左右,而是斜着的上下左右。
(4)transform可以实现上下左右旋转缩放等效果,但它是相对于一个位置而言的,如果相对位置不变,则相当于只生效一次,而如果每次都把改变后的位置重新设置为新的相对位置,则每次都会生效。即代码中,有两种方法。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
//创建一个btn,里面是图像
UIButton *btnImg=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnImg.frame=CGRectMake(130, 120, 100, 100);
//如果是.png的图像,可以省略.png后缀
[btnImg setBackgroundImage:[UIImage imageNamed:@"hi"] forState:UIControlStateNormal];
//增加一个tag,用于后续获取这个btnImg
btnImg.tag=1;
[self.view addSubview:btnImg];
//创建上下左右、左右旋转、放大缩小按钮
UIButton *btnUp=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnUp.frame=CGRectMake(80, 400, 20, 20);
[btnUp setTitle:@"上" forState:UIControlStateNormal];
[btnUp addTarget:self action:@selector(up) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnUp];
UIButton *btnDown=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnDown.frame=CGRectMake(80, 460, 20, 20);
[btnDown setTitle:@"下" forState:UIControlStateNormal];
[btnDown addTarget:self action:@selector(down) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnDown];
UIButton *btnLeft=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnLeft.frame=CGRectMake(50, 430, 20, 20);
[btnLeft setTitle:@"左" forState:UIControlStateNormal];
[btnLeft addTarget:self action:@selector(left) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnLeft];
UIButton *btnRight=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnRight.frame=CGRectMake(110, 430, 20, 20);
[btnRight setTitle:@"右" forState:UIControlStateNormal];
[btnRight addTarget:self action:@selector(right) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnRight];
UIButton *btnRoLeft=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnRoLeft.frame=CGRectMake(150, 430, 40, 20);
[btnRoLeft setTitle:@"左转" forState:UIControlStateNormal];
[btnRoLeft addTarget:self action:@selector(roLeft) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnRoLeft];
UIButton *btnRoRight=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnRoRight.frame=CGRectMake(200, 430, 40, 20);
[btnRoRight setTitle:@"右转" forState:UIControlStateNormal];
[btnRoRight addTarget:self action:@selector(roRight) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnRoRight];
UIButton *btnBig=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnBig.frame=CGRectMake(250, 430, 40, 20);
[btnBig setTitle:@"放大" forState:UIControlStateNormal];
[btnBig addTarget:self action:@selector(big) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnBig];
UIButton *btnSmall=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btnSmall.frame=CGRectMake(300, 430, 40, 20);
[btnSmall setTitle:@"缩小" forState:UIControlStateNormal];
[btnSmall addTarget:self action:@selector(small) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnSmall];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
//只有一个按钮的时候,就没必要传递这个按钮参数过来
-(void)up{
//用viewWithTag获取UIView对象,如果我们知道具体是哪种UIView,可以强制转换一下
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
//以下语句是向上移动10,但按钮只生效一次,因为它相当于赋值ty=-10,且它的移动只相对于最原始位置,所以相对于的那个原始位置不变,而且ty=-10不变,则不再移动
//要么每次点击按钮改变ty的值,要么用不断改变它相对于的位置,即把最新的位置设置为它的相对于的位置
//btnImg1.transform=CGAffineTransformMakeTranslation(0, -10);
btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, 0, -10);
}
-(void)down{
//同理,如下
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, 0, 10);
}
-(void)left{
//同理,如下
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, -10, 0);
}
-(void)right{
//同理,如下
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, 10, 0);
}
-(void)roLeft{
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
//同样,第一句只能点击生效1次,且用的是弧度制的数字,pi/4
//btnImg1.transform=CGAffineTransformMakeRotation(-M_PI_4);
btnImg1.transform=CGAffineTransformRotate(btnImg1.transform, -M_PI_4);
}
-(void)roRight{
//同理
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
btnImg1.transform=CGAffineTransformRotate(btnImg1.transform, M_PI_4);
}
-(void)big{
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
//同样,第一句只能点击生效1次,且用的是弧度制的数字,pi/4
//btnImg1.transform=CGAffineTransformMakeScale(1.2, 1.2);
btnImg1.transform=CGAffineTransformScale(btnImg1.transform, 1.2, 1.2);
}
-(void)small{
//同理
UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
btnImg1.transform=CGAffineTransformScale(btnImg1.transform, 0.8, 0.8);
}
@end
结果: