终于效果图:
BeyondViewController.h
// // BeyondViewController.h // 02_button控制物体形变 // // Created by beyond on 14-7-21. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> @interface BeyondViewController : UIViewController // 控制器成员记住界面上的头像button @property (weak, nonatomic) IBOutlet UIButton *headBtn; // button控制 head button 上 下 左 右 移动 - (IBAction)btnClick:(UIButton *)sender; - (IBAction)AffineTransform:(UIButton *)sender; - (IBAction)reset:(UIButton *)sender; @end
BeyondViewController.m
// // BeyondViewController.m // 02_按钮控制物体形变 // // Created by beyond on 14-7-21. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "BeyondViewController.h" #define kDelta 20 const int DELTA = 50; @interface BeyondViewController () { // 左旋转 最笨方法 成员变量 记住弧度 可累计 CGFloat _angel; // 成员记住 headBtn默认的frame CGRect _headBtnFrame; } @end @implementation BeyondViewController - (void)viewDidLoad { [super viewDidLoad]; // view一载入 就用 成员 记住 headBtn的初始位置 _headBtnFrame = _headBtn.frame; // 调用自己定义方法,代码创建 buttuon [self addButtionByCoding]; [self addTextFieldByCoding]; } # pragma mark - 按钮控制 head button 上 下 左 右 移动 - (void)moveByFrame:(UIButton *)sender { // UIView的类方法 实现动画效果(開始动画) [UIView beginAnimations:nil context:nil]; // 默认动画持续时间是 0.2 [UIView setAnimationDuration:1]; // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量 CGRect frame = self.headBtn.frame; // 一般数字是一样的话就能够抽取为: 1,变量; 2,宏; 3,const int // CGFloat delta = 50; // #define kDelta 50 // const int DELTA = 50; int tag = [sender tag]; switch (tag) { case 1: frame.origin.y -= kDelta; break; case 2: frame.origin.x += kDelta; break; case 3: frame.origin.y += kDelta; break; case 4: frame.origin.x -= kDelta; break; default: break; } self.headBtn.frame=frame; // UIView的类方法 实现动画效果(结束动画) [UIView commitAnimations]; } - (IBAction)btnClick:(UIButton *)sender { [self animateWithBlock:^{ // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量 CGPoint center = self.headBtn.center; // 一般数字是一样的话就能够抽取为: 1,变量; 2,宏; 3,const int // CGFloat delta = 50; // #define kDelta 50 // const int DELTA = 50; int tag = [sender tag]; switch (tag) { case 1: center.y -= kDelta; break; case 2: center.x += kDelta; break; case 3: center.y += kDelta; break; case 4: center.x -= kDelta; break; default: break; } self.headBtn.center = center; }]; } #pragma mark - 按钮控制 head button 左右旋转 放大 缩小 - (IBAction)AffineTransform:(UIButton *)sender { // UIView的类方法 实现动画效果(開始动画) [UIView beginAnimations:nil context:nil]; // 默认动画持续时间是 0.2 [UIView setAnimationDuration:1]; int tag = [sender tag]; switch (tag) { case 11: // _angel -= M_PI_4; // 旋转 顺时针为正方向,使用弧度 M_PI_4 就是顺时针旋转45度 //_headBtn.transform = CGAffineTransformMakeRotation(_angel); // CGAffineTransformRotate方法:返回一个新的结构体,是一个在原来 的结构体基础上进行一定弧度旋转的新的结构体 _headBtn.transform = CGAffineTransformRotate(_headBtn.transform, - M_PI_4); break; case 12: // _angel += M_PI_4; // 旋转 顺时针为正方向,使用弧度 M_PI_4 就是顺时针旋转45度 //_headBtn.transform = CGAffineTransformMakeRotation(_angel); // CGAffineTransformRotate方法:返回一个新的结构体,是一个在原来 的结构体基础上进行一定弧度旋转的新的结构体 _headBtn.transform = CGAffineTransformRotate(_headBtn.transform, M_PI_4); break; case 13: // 缩小 // _headBtn.transform = CGAffineTransformMakeScale(0.5, 0.5); _headBtn.transform = CGAffineTransformScale(_headBtn.transform, 0.8, 0.8); break; case 14: // 放大 // _headBtn.transform = CGAffineTransformMakeScale(1.5, 1.5); _headBtn.transform = CGAffineTransformScale(_headBtn.transform, 1.2, 1.2); break; case 0: // 点击headBtn的时候,清空并还原为默认状态 _headBtn.transform = CGAffineTransformIdentity; _headBtn.frame = _headBtnFrame; break; default: break; } // UIView的类方法 实现动画效果(结束动画) [UIView commitAnimations]; } #pragma mark - 通过block封装代码 // void (^myBlock)(); void (^myBlock)() = ^{ NSLog(@"beyond"); }; // 手动调用block()时有点问题 - (void)animateWithBlock:(void(^)())block { // UIView的类方法 实现动画效果(開始动画) [UIView beginAnimations:nil context:nil]; // 默认动画持续时间是 0.2 [UIView setAnimationDuration:1]; block(); // UIView的类方法 实现动画效果(结束动画) [UIView commitAnimations]; } - (IBAction)reset:(UIButton *)sender { [self animateWithBlock:^{ // 点击的时候,清空并还原为默认状态 _headBtn.transform = CGAffineTransformIdentity; _headBtn.frame = _headBtnFrame; }]; } - (void) addButtionByCoding { // 1,用类方法创建 button实例 UIButton *button = [[UIButton alloc] init]; // 2,设置button的细节 button.frame = CGRectMake(0, 0, 100, 100); // 正常状态 [button setTitle:@"normal" forState:UIControlStateNormal]; [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; // [button setImage:[UIImage imageNamed:@"btn_01.png"] forState:UIControlStateNormal]; [button setBackgroundImage:[UIImage imageNamed:@"btn_01.png"] forState:UIControlStateNormal]; // 点击时高亮状态 [button setTitle:@"highlighted" forState:UIControlStateHighlighted]; [button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; // [button setImage:[UIImage imageNamed:@"btn_02.png"] forState:UIControlStateHighlighted]; [button setBackgroundImage:[UIImage imageNamed:@"btn_02.png"] forState:UIControlStateHighlighted]; // 为按钮加入点击事件 [button addTarget:self action:@selector(codeBtnClick:) forControlEvents:UIControlEventTouchUpInside]; // 3,加入button到当前控制器的view里面 [self.view addSubview:button]; } // 代码创建的按钮的点击事件 - (void) codeBtnClick:(UIButton *)sender { NSLog(@"%@",sender); NSLog(@"%p",sender); } // 代码创建文本输入框 - (void) addTextFieldByCoding { // 1,类方法创建控件 UITextField *textField = [[UITextField alloc]init]; // 2,控件细节 textField.frame = CGRectMake(100, 0, 100, 100); textField.backgroundColor = [UIColor grayColor]; // 系统字体大小 textField.font = [UIFont systemFontOfSize:20]; textField.font = [UIFont boldSystemFontOfSize:30]; // 居中显示 CGFloat x = self.view.frame.size.width*0.5; CGFloat y = self.view.frame.size.height*0.5; // textField.center = CGPointMake(x, y); // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量 CGPoint center = textField.center; center.x = x; center.y = y; textField.center = center; // 3,将控件加入到当前控制器的view [self.view addSubview:textField]; } @end
效果图