纯代码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

图片自己找

时间: 2024-10-09 16:13:18

纯代码frame位移和伸缩的相关文章

纯代码transform位移伸缩和旋转

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 /**

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中

Stroyboard(可视化界面)与纯代码

Stroyboard是苹果在 iOS 5 中引入的新技术,让纯代码变成了一个可视化的界面,让nib.xib有一种更加直观的展现,几十行甚至几百行的代码搞定的一个控件,现在只要动动手指就能完成一个控件了,初学者学到的绝大部分都是教你怎么使用StoryBoard的而不是怎么用纯代码,但是我自己更加喜欢纯代码,总觉得自己敲出来的代码更加能信任,修改起来也会更加简单. 一开始我以为纯代码跟可视化界面其实是一样的,看个人喜好选择用什么方法,后来查了资料发现,如果是一个大的项目,用可视化界面,那么团队就不能

iOS开发UI篇—以微博界面为例使用纯代码自定义cell程序编码全过程(一)

iOS开发UI篇-以微博界面为例使用纯代码自定义cell程序编码全过程(一) 一.storyboard的处理 直接让控制器继承uitableview controller,然后在storyboard中把继承自uiviewcontroller的控制器干掉,重新拖一个tableview controller,和主控制器进行连线. 项目结构和plist文件 二.程序逻辑业务的处理 第一步,把配图和plist中拿到项目中,加载plist数据(非png的图片放到spooding files中) 第二步,字

swift UI专项训练41 用纯代码的方式实现stepper的值传递

之前讲过通过storyboard的方式捕获控件的值,现在我们来试试通过纯代码的方式来实现同样的功能.首先定义一个stepper和一个label,用label来显示stepper的当前值. self.priceStepper = UIStepper(frame: CGRectMake(150, 120, 100, 20)) self.priceStepper.minimumValue = 100//最小值 self.priceStepper.maximumValue = 2000//最大值 sel

纯代码创建Button控件:

纯代码创建Button控件: // 创建按钮 UIButton *btn = [[UIButton alloc] init]; // 添加按钮 [self.view addSubview:btn]; // 设置frame btn.frame = CGRectMake(50, 50, 100, 100); // 设置背景图片 // 通过文件名加载图片(凡是PNG图片,都不用加拓展名) UIImage *normal = [UIImage imageName:@“btn_01”]; // 设置普通状

纯代码Tom

1 // 2 // LWTViewController.m 3 // 纯代码Tom 4 // 5 // Created by apple on 14-5-21. 6 // Copyright (c) 2014年 lwt. All rights reserved. 7 // 8 9 #import "LWTViewController.h" 10 #define KBtnSize 60 11 12 // 图标按钮的左右的排列 13 typedef enum { 14 KButtonThi

IOS之UI--小实例项目--添加商品和商品名(纯代码终结版)

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

IOS开发UI篇--UITableView的自定义布局==纯代码布局

UITableView中除了利用系统的UItableViewCell不能完成需求进行布局时,还可以进行自定义布局: 自定义布局分为两类:(1)利用代码进行创建 (2)利用xib进行实现: 下面对利用代码进行创建分析: 应用场景:像微博,等列表数据展示(由于微博的每个单元格的数据大小不一致,所以得计算每个单元格的大小) 分析:前提是获取列表数据,然后建立每个单元格的模型(建立单元格模型应继承UITableViewCell)复写 - (id)initWithStyle:(UITableViewCel