纯代码frame位移和伸缩
1 // 2 // LWTViewController.m 3 // 纯代码位移和伸缩作业 4 // 5 // Created by apple on 14-5-20. 6 // Copyright (c) 2014年 lwt. All rights reserved. 7 // 8 9 #import "LWTViewController.h" 10 #pragma mark 定义常量 11 /** 图片距离顶部的高度 */ 12 #define KImageY 60 13 /** 图片的尺寸 */ 14 #define KImageWidth 100 15 /** 按钮的尺寸 */ 16 #define KMoveButton 40 17 /** 图片平移的距离 */ 18 #define KMovingDelta 20 19 20 /** 定义平移tag的枚举 */ 21 typedef enum { 22 KMoveDirTop = 1, 23 KMoveDirLeft, 24 KMoveDirBottom, 25 KMoveDirRight 26 } KMoveDir; 27 28 @interface LWTViewController () 29 30 /** 图片的属性 */ 31 @property (nonatomic, strong) UIButton *imageView; 32 33 /** 平移按钮的属性 */ 34 @property (nonatomic, strong) UIButton *topBtn; 35 @property (nonatomic, strong) UIButton *leftBtn; 36 @property (nonatomic, strong) UIButton *bottomBtn; 37 @property (nonatomic, strong) UIButton *rightBtn; 38 39 @end 40 41 @implementation LWTViewController 42 43 44 - (void)viewDidLoad 45 { 46 [super viewDidLoad]; 47 // Do any additional setup after loading the view, typically from a nib. 48 49 // 创建要移动的图片按钮 50 UIButton *imageViewButton = [[UIButton alloc] init]; 51 // 按钮位置 52 CGFloat imageX = (self.view.frame.size.width - KImageWidth) / 2; 53 imageViewButton.frame = CGRectMake(imageX, KImageY, KImageWidth, KImageWidth); 54 55 // 按钮默认背景 56 UIImage *image = [UIImage imageNamed:@"btn_01"]; 57 [imageViewButton setBackgroundImage:image forState:UIControlStateNormal]; 58 59 // 按钮默认文字 60 [imageViewButton setTitle:@"点我啊" forState:UIControlStateNormal]; 61 [imageViewButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 62 63 // 按钮高亮背景 64 UIImage *imageHighed = [UIImage imageNamed:@"btn_02"]; 65 [imageViewButton setBackgroundImage:imageHighed forState:UIControlStateHighlighted]; 66 67 // 按钮高亮文字 68 [imageViewButton setTitle:@"点我干啥" forState:UIControlStateHighlighted]; 69 [imageViewButton setTitleColor:[UIColor magentaColor] forState:UIControlStateHighlighted]; 70 71 [self.view addSubview:imageViewButton]; 72 73 _imageView = imageViewButton; 74 75 // 创建移动按钮 76 77 // 上 78 UIButton *topButton = [self createButton:@"top" andTag:KMoveDirTop andX:60 andY:320]; 79 // 监听点击事件 80 [topButton addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 81 // 属性赋值 82 self.topBtn = topButton; 83 84 //左 85 UIButton *leftButton = [self createButton:@"left" andTag:KMoveDirLeft andX:20 andY:360]; 86 // 监听点击事件 87 [leftButton addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 88 // 属性赋值 89 self.leftBtn = leftButton; 90 91 //下 92 UIButton *bottomButton = [self createButton:@"bottom" andTag:KMoveDirBottom andX:60 andY:400]; 93 // 监听点击事件 94 [bottomButton addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 95 // 属性赋值 96 self.bottomBtn = bottomButton; 97 98 //右 99 UIButton *rightButton = [self createButton:@"right" andTag:KMoveDirRight andX:100 andY:360]; 100 // 监听点击事件 101 [rightButton addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside]; 102 // 属性赋值 103 self.rightBtn = rightButton; 104 105 // 创建伸缩按钮 106 // 放大 107 UIButton *plusButton = [self createButton:@"plus" andTag:1 andX:180 andY:320]; 108 // 监听点击事件 109 [plusButton addTarget:self action:@selector(scale:) forControlEvents:UIControlEventTouchUpInside]; 110 111 // 缩小 112 UIButton *minusButton = [self createButton:@"minus" andTag:0 andX:240 andY:320]; 113 // 监听点击事件 114 [minusButton addTarget:self action:@selector(scale:) forControlEvents:UIControlEventTouchUpInside]; 115 116 } 117 118 #pragma mark - 实现方法 119 /** 创建按钮 默认和高亮的图片名称相近,x,y是位置是手动布局的 */ 120 - (UIButton *) createButton:(NSString *)location andTag: (int)tag andX: (CGFloat)x andY: (CGFloat)y 121 { 122 UIButton *btn = [[UIButton alloc] init]; 123 124 btn.frame = CGRectMake(x, y, KMoveButton, KMoveButton); 125 // 背景 126 NSString *normal = [NSString stringWithFormat:@"%@_normal",location]; 127 UIImage *upImage = [UIImage imageNamed:normal]; 128 [btn setBackgroundImage:upImage forState:UIControlStateNormal]; 129 130 //高亮背景 131 NSString *highlighted = [NSString stringWithFormat:@"%@_highlighted",location]; 132 UIImage *upImageHighed = [UIImage imageNamed:highlighted]; 133 [btn setBackgroundImage:upImageHighed forState:UIControlStateHighlighted]; 134 // tag 135 btn.tag = tag; 136 [self.view addSubview:btn]; 137 return btn; 138 } 139 140 141 /** 创建动画效果 */ 142 - (void) makeAnimation : (void (^)())block 143 { 144 [UIView beginAnimations:nil context:nil]; 145 [UIView setAnimationDuration:1.0]; 146 147 block(); 148 149 [UIView commitAnimations]; 150 } 151 152 /** 平移方法 */ 153 - (void) move : (UIButton *)button 154 { 155 [self makeAnimation:^{ 156 // 创建一个临时的CGRect 157 CGRect tempFrame = self.imageView.frame; 158 159 // 判断平移方向 160 switch (button.tag) { 161 case KMoveDirTop: // 上 162 tempFrame.origin.y -= KMovingDelta; 163 // 平移不能超过手机屏幕 164 if (tempFrame.origin.y < 0) { 165 tempFrame.origin.y = 0; 166 } 167 break; 168 case KMoveDirLeft: // 左 169 tempFrame.origin.x -= KMovingDelta; 170 // 平移不能超过手机屏幕 171 if (tempFrame.origin.x < 0) { 172 tempFrame.origin.x = 0; 173 } 174 break; 175 case KMoveDirBottom: // 下 176 tempFrame.origin.y += KMovingDelta; 177 // 平移不能超过手机屏幕 178 if (tempFrame.origin.y > (self.view.frame.size.height - KImageWidth)) { 179 tempFrame.origin.y = self.view.frame.size.height -KImageWidth; 180 } 181 break; 182 case KMoveDirRight: // 右 183 tempFrame.origin.x += KMovingDelta; 184 // 平移不能超过手机屏幕 185 if (tempFrame.origin.x > (self.view.frame.size.width - KImageWidth)) { 186 tempFrame.origin.x = self.view.frame.size.width - KImageWidth; 187 } 188 break; 189 } 190 191 // 重新赋值 192 self.imageView.frame = tempFrame; 193 194 // 平移到与屏幕重合则无法点击按钮 不用三目运算符则会出现一直无法点击事件 195 self.topBtn.enabled = self.imageView.frame.origin.y ? 1 : 0; 196 self.leftBtn.enabled = self.imageView.frame.origin.x ? 1 : 0; 197 self.bottomBtn.enabled = self.imageView.frame.origin.y - (self.view.frame.size.height -KImageWidth) ? 1 : 0; 198 self.rightBtn.enabled = self.imageView.frame.origin.x - (self.view.frame.size.width - KImageWidth) ? 1 : 0; 199 200 }]; 201 202 } 203 204 /** 伸缩方法 */ 205 - (void) scale : (UIButton *)button 206 { 207 [self makeAnimation:^{ 208 // 创建临时CGRect 209 CGRect tempBounds = self.imageView.bounds; 210 // 判断放大缩小 211 if (button.tag) { 212 tempBounds.size.width *= 1.2 ; 213 tempBounds.size.height *= 1.2; 214 } else { 215 tempBounds.size.width *= 0.8; 216 tempBounds.size.height *= 0.8; 217 } 218 // 重新赋值 219 self.imageView.bounds = tempBounds; 220 }]; 221 } 222 223 224 - (void)didReceiveMemoryWarning 225 { 226 [super didReceiveMemoryWarning]; 227 // Dispose of any resources that can be recreated. 228 } 229 230 @end
图片自己找