纯代码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 /** 图片的尺寸 */
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 andPoint:CGPointMake(60, 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 andPoint:CGPointMake(20, 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 andPoint:CGPointMake(60, 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 andPoint:CGPointMake(100, 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 andPoint:CGPointMake(180, 320)];
108 // 监听点击事件
109 [plusButton addTarget:self action:@selector(scale:) forControlEvents:UIControlEventTouchUpInside];
110
111 // 缩小
112 UIButton *minusButton = [self createButton:@"minus" andTag:0 andPoint:CGPointMake(240, 320)];
113 // 监听点击事件
114 [minusButton addTarget:self action:@selector(scale:) forControlEvents:UIControlEventTouchUpInside];
115
116 // 创建旋转按钮
117 //逆时针
118 UIButton *leftRotateButton = [self createButton:@"left_rotate" andTag:-1 andPoint:CGPointMake(180, 400)];
119 // 监听点击事件
120 [leftRotateButton addTarget:self action:@selector(rotate:) forControlEvents:UIControlEventTouchUpInside];
121
122 //顺时针
123 UIButton *rightRotateButton = [self createButton:@"right_rotate" andTag:1 andPoint:CGPointMake(240, 400)];
124 // 监听点击事件
125 [rightRotateButton addTarget:self action:@selector(rotate:) forControlEvents:UIControlEventTouchUpInside];
126
127 }
128
129 #pragma mark - 实现方法
130 /** 创建按钮 默认和高亮的图片名称相近,x,y是位置是手动布局的 */
131 - (UIButton *) createButton:(NSString *)location andTag: (int)tag andPoint : (CGPoint)point
132 {
133 UIButton *btn = [[UIButton alloc] init];
134
135 btn.frame = (CGRect){point,KMoveButton, KMoveButton};
136 // 背景
137 NSString *normal = [NSString stringWithFormat:@"%@_normal",location];
138 UIImage *upImage = [UIImage imageNamed:normal];
139 [btn setBackgroundImage:upImage forState:UIControlStateNormal];
140
141 //高亮背景
142 NSString *highlighted = [NSString stringWithFormat:@"%@_highlighted",location];
143 UIImage *upImageHighed = [UIImage imageNamed:highlighted];
144 [btn setBackgroundImage:upImageHighed forState:UIControlStateHighlighted];
145 // tag
146 btn.tag = tag;
147 [self.view addSubview:btn];
148 return btn;
149 }
150
151
152 /** 创建动画效果 */
153 - (void) makeAnimation : (void (^)())block
154 {
155 [UIView beginAnimations:nil context:nil];
156 [UIView setAnimationDuration:1.0];
157
158 block();
159
160 [UIView commitAnimations];
161 }
162
163 /** 平移方法 */
164 - (void) move : (UIButton *)button
165 {
166 [self makeAnimation:^{
167
168 // 判断平移方向
169 switch (button.tag) {
170 case KMoveDirTop: // 上
171
172 self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, 0, -KMovingDelta);
173 // // 不能超过屏幕
174 // if (self.imageView.frame.origin.y < 0) {
175 // CGRect tempFrame = self.imageView.frame;
176 // tempFrame.origin.y = 0;
177 // self.imageView.frame = tempFrame;
178 // }
179 break;
180 case KMoveDirLeft: // 左
181
182 self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, -KMovingDelta, 0);
183 // // 不能超过屏幕
184 // if (self.imageView.frame.origin.x < 0) {
185 // CGRect tempFrame = self.imageView.frame;
186 // tempFrame.origin.x = 0;
187 // self.imageView.frame = tempFrame;
188 // }
189 break;
190 case KMoveDirBottom: // 下
191
192 self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, 0, KMovingDelta);
193 // // 不能超过屏幕
194 // if (self.imageView.frame.origin.y > (self.view.frame.size.height -KImageWidth)) {
195 // CGRect tempFrame = self.imageView.frame;
196 // tempFrame.origin.y = self.view.frame.size.height -KImageWidth;
197 // self.imageView.frame = tempFrame;
198 // }
199 break;
200 case KMoveDirRight: // 右
201
202 self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, KMovingDelta, 0);
203 // // 不能超过屏幕
204 // if (self.imageView.frame.origin.x > (self.view.frame.size.width - KImageWidth)) {
205 // CGRect tempFrame = self.imageView.frame;
206 // tempFrame.origin.x = self.view.frame.size.width - KImageWidth;
207 // self.imageView.frame = tempFrame;
208 // }
209 break;
210 }
211
212 // // 平移到与屏幕重合则无法点击按钮 不用三目运算符则会出现一直无法点击事件
213 // self.topBtn.enabled = self.imageView.frame.origin.y ? 1 : 0;
214 // self.leftBtn.enabled = self.imageView.frame.origin.x ? 1 : 0;
215 // self.bottomBtn.enabled = self.imageView.frame.origin.y - (self.view.frame.size.height -KImageWidth) ? 1 : 0;
216 // self.rightBtn.enabled = self.imageView.frame.origin.x - (self.view.frame.size.width - KImageWidth) ? 1 : 0;
217
218 }];
219
220 }
221
222 /** 伸缩方法 */
223 - (void) scale : (UIButton *)button
224 {
225 [self makeAnimation:^{
226 // 判断放大缩小
227 CGFloat scale = button.tag ? 1.2 : 0.8;
228
229 self.imageView.transform = CGAffineTransformScale(self.imageView.transform, scale, scale);
230 }];
231 }
232
233 /** 旋转方法 */
234 - (void) rotate : (UIButton *)button
235 {
236 [self makeAnimation:^{
237 CGFloat rotate = M_PI_4 * button.tag;
238 self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotate);
239 }];
240
241 }
242
243
244 - (void)didReceiveMemoryWarning
245 {
246 [super didReceiveMemoryWarning];
247 // Dispose of any resources that can be recreated.
248 }
249
250 @end

如果有人看到的话,麻烦你教教我transform不用frame如何设置不能超出屏幕,而且旋转后移动要边上图片会丢失。请指教,谢谢!!!

纯代码transform位移伸缩和旋转,布布扣,bubuko.com

时间: 2024-12-08 06:44:35

纯代码transform位移伸缩和旋转的相关文章

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

(纯代码 )transform旋转:

// 实现图片的旋转和移动和放大缩小 #import "ViewController.h" @interface ViewController () @property (nonatomic, weak) UIButton *_btnImage; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; /** 头像图片 */ // 设置按钮为自定义样式 UIButton *btnIma

【iOS开发】多屏尺的自动适配 AutoLayout (纯代码方式)

关于AutoLayout,最早从iOS6开始引入使用. 主要功能是使用约束,对视图进行相对布局,以适应不同屏尺的变换. 网上大量的资料都在介绍xib和storyboard,如何使用AutoLayout,说纯代码使用AutoLayout进行UI布局的越来越少.对于我这个习惯了代码UI布局的人,写个备忘: AutoLayout是什么? 使用一句Apple的官方定义的话 AutoLayout是一种基于约束的,描述性的布局系统. Auto Layout Is a Constraint-Based, De

Unity CG 写一个超酷的 ray-marching(shader纯代码写3D)

Unity CG 写一个超酷的 ray-marching(shader纯代码写3D) 1.其实自从看了http://www.shadertoy.com(inigo quilez为其主创始人)上的shader后,让我感到很高兴 2.更重要的是自从我接触了一个叫 inigo quilez 的shader技术后,让我觉得shader情感更深的浓厚了 3.http://www.iquilezles.org/ 哈哈,当然给大家一个崇拜的机会吧,你一定会学到你想学到的技术和秘密 哈哈,邪恶的专栏地址放送,一

iPad纯代码实现横竖屏切换,采用相对布局

因为本来不喜欢使用StoryBoard.xib等可视化编程,一直使用的纯代码布局,但是纯代码布局的iOS开发者会遇到一个问题,就是横竖屏适配的问题,如果使用自动布局,那些约束的,写起来都是不难,但是控件之间的关联太多,以至于维护性很差.本人由于工作的原因,做iPad开发,那就必须要解决横竖屏适配的问题,于是就有了这篇文章. 代码如下: // //  ViewController.swift //  iPad横竖屏切换 // //  Created by zhangxu on 16/7/30. /

纯代码添加约束,autolayout 适配

IOS AutoLayout 代码约束—VFL 2014-12-22 22:19:43http://my.oschina.net/carson6931-Carson6931-点击数:2148 IOS 提供了两种添加约束的方法 第一种: +(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2

纯代码适配iPad横竖屏

网上大量的文章在适配iPad横竖屏时都使用了xib或storyboad, 但是xib和storyboard并不受团队开发欢迎,下面介绍采用纯代码的方式适配iPad的横屏和竖屏,方法非常简单: 1.) 设置要适配的对象的autoresizingMask,  eg: targetView.autoresizingMask = UIViewAutoresizingFlexibleHeight; 2.)   在当前的视图控制器中调用[self willRotateToInterfaceOrientati

纯代码 自动屏幕适配iPhone

代码判断,你也可以用xib自带的自动布局选项 我是用的纯代码写的 纯代码 自动屏幕适配iPhone,布布扣,bubuko.com

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

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