不多说,先上图片看效果,AJ分享,必须精品

这个小程序主要实现点击方向键可以让图标上下左右动还有放大缩小以及旋转的功能,点击图片会显示另一张图片。

点击变换

其实用到了按钮的两个状态,再State Config中的Default还有Highlighted的两个状态下background内容图片的设置

其实就是按钮的几个状态:
Default:默认状态
Highlighted:被点击时候的高亮状态
Selected:被选中的时候的状态
Disabled:不能使用的时候的状态

移动

- (IBAction)move:(UIButton *)button {
//获得frame
CGRect frame = self.iconButton.frame;
//根据按钮的类型来修改frame属性
switch (button.tag) {
case kMovingDirTop:/**向上移动*/
frame.origin.y -=20;
break;
case kMovingDirBottom:/**向下移动*/
frame.origin.y +=20;
break;
case kMovingDirLeft:/**向左移动*/
frame.origin.x -=20;
break;
case kMovingDirRight:/**向右移动*/
frame.origin.x +=20;
break;
}

这是实现的主要方法,实现方法其实很多,这方法也不是最好的,可以参考。
这里需要注意的是:frame
对于类UIView(UIButton等等都是继承自他,可以看成在手机上显示的所有东西都是这个)有属性在屏幕上的位置等等最重要的属性是位置和大小。
我们可以通过按住command + 鼠标左键(ctrl+command+j)进入看源代码
通过看源码,我们发现他定义了三个:

@property(nonatomic) CGRect            frame;
@property(nonatomic) CGRect bounds;
@property(nonatomic) CGPoint center;

这里有:
frame:主要管位置和大小(初始化的时候用,其他时候改变要用下下面两个)
bounds:他的圆点是0,主要管大小
center:主要是点,决定位置

他们的类型是
(结构体struct)CGRect

struct CGRect {
CGPoint origin;
CGSize size;
};

而他又包括point和size 当然这两个也是结构体,看名字就知道他们是干嘛的了例如origin是:
struct CGPoint {/*决定在屏幕上xy坐标*/
CGFloat x;
CGFloat y;
};

而你要是再看看,其实CGFloat就是double

# define CGFLOAT_TYPE double

放大缩小功能

//放大缩小
- (IBAction)zoom:(UIButton *)button{
//取出bounds
CGRect bounds = self.iconButton.bounds;
if(button.tag){
NSLog(@"放大");
bounds.size.width +=20;
bounds.size.height +=20;
}else{
bounds.size.width -=20;
bounds.size.height -=20;
NSLog(@"缩小");
}
//加动画
//动画开始
[UIView beginAnimations:nil context:nil];
//设置持续时间
[UIView setAnimationDuration:1.0];
//放大缩小了的bounds放回到原来button中
self.iconButton.bounds = bounds;
//提交动画
[UIView commitAnimations];
}

在这里我并没有用frame来修改,而是用了bounds的属性,其实本质上还是底层的CGSize而已

在这里为了学习,我又添加了一段动画代码IOS的动画很人性化,比安卓强了不止一点半点。要注意,学习起来一定要点进去看看,不会的就试试,重要的东西一般会放在代码的靠上的部位。

旋转功能

//旋转
- (IBAction)rotate:(UIButton *)button{
//旋转主要用到角度,OC中用的是弧度
CGFloat angle = (button.tag) ? M_PI_4 : -M_PI_4;
self.iconButton.transform = CGAffineTransformRotate(self.iconButton.transform, angle);
NSLog(@"%@",NSStringFromCGAffineTransform(self.iconButton.transform));
}

好了,基本功能完成了。剩下的大家可以自己尝试,完善。不过不要放慢学习的脚步哦。
PS1.需要学习资料的可以加我微信 znycat
PS2.为了学习,我一周会更新最少(%d),未知。次;

AJ学IOS(02)UI之按钮操作 点击变换 移动 放大缩小 旋转的更多相关文章

  1. 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转

    不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...

  2. AJ学IOS(01) UI之Hello World与加法计算器

    不多说,AJ分享,必须精品 这两个一个是HelloWorld(左边) 另一个是 加法计算器(右边)的截图. 先运行第一个 程序看看效果 1.打开Xcode(没有哦mac系统的没有xcode的帮你们默哀 ...

  3. AJ学IOS(35)UI之Quartz2D仿真支付宝手势解锁_代理获得密码。

    AJ分享,必须精品 效果: 实现步骤 其实这个实现起来不难 第一步先放好主要的UI,一张背景图和一个View 第二部就是把9个button放到view中,设置好按钮的默认和选中图片. 注意:创建时候的 ...

  4. AJ学IOS(28)UI之Quartz2D简单介绍

    AJ分享,必须精品 iOS开发UI篇—Quartz2D简单介绍 什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : ...

  5. AJ学IOS(16)UI之XIB自定义Cell实现团购UI

    AJ分享,必须精品 先看效果图 自定义Cell 本次主要是自定义Cell的学习 实现自定义Cell主要有三种方法:按照使用的频繁度排序: XIB > 纯代码 > StoryBoard XI ...

  6. AJ学IOS(13)UI之UITableView学习(下)汽车名牌带右侧索引

    AJ分享,必须精品 先看效果图 代码 ViewController #import "NYViewController.h" #import "NYCarGroup.h& ...

  7. AJ学IOS(19)UI之QQ好友列表

    AJ分享,必须精品 先看效果图 哈哈,这次猫猫给来个动态的图片,这个看起来带劲 实现思路 首先建立模型 这里用到的是一个双层的模型. cell的实现 这里一看其实就知道是一个tableView,我们自 ...

  8. AJ学IOS(09)UI之UIScrollView代理触摸实现_图片缩放

    AJ分享,必须精品 先看效果 代码 // // NYViewController.m // 05-放大缩小图片UIScrollView // // Created by apple on 15-3-2 ...

  9. AJ学IOS(06)UI之iOS热门游戏_超级猜图

    AJ分享,必须精品 先看效果图 思路 需求分析 1,搭建界面 1>上半部分,固定的,用Storyboard直接连线(OK) 2>下半部分,根据题目的变化,不断变化和调整,用代码方式实现比较 ...

随机推荐

  1. Deep Protein Methylation Profiling by Combined Chemical and Immunoaffinity Approaches Reveals Novel PRMT1 Targets (结合层析法和免疫沉淀法的蛋白甲基化的深度检测技术发现了PRMT1新的靶标蛋白)

    题目:Deep Protein Methylation Profiling by Combined Chemical and Immunoaffinity Approaches Reveals Nov ...

  2. python中使用openpyxl模块时报错: File is not a zip file

    python中使用openpyxl模块时报错: File is not a zip file. 最大的原因就是不是真正的 xlsx文件, 如果是通过 库xlwt  新建的文件,或者是通过自己修改后缀名 ...

  3. 洛谷3834 hdu2665主席树模板,动态查询区间第k小

    题目链接:https://www.luogu.com.cn/problem/P3834 对于区间查询第k小的问题,在区间数量达到5e5的时候是难以用朴素数据结构实现的,这时候主席树就应运而生了,主席树 ...

  4. hdu1026Ignatius and the Princess ,又要逃离迷宫了

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1026/ 题意就是一个迷宫,然后有些位置上有守卫,守卫有一个血量,要多花费血量的时间击败他,要求从(0,0)到(n ...

  5. hdu1429 胜利大逃亡(续)???天天逃亡???

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1429/ 题目就是迷宫问题的变种,给出一张地图,上面分布着钥匙和门,一种要是只能开一种特定的门,给出起点和终点,问 ...

  6. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  7. HDU 4325 Flowers 树状数组+离散化

    Flowers Problem Description As is known to all, the blooming time and duration varies between differ ...

  8. coding++:TransactionDefinition 接口介绍

    TransactionDefinition类结构: 作用: 1.TransactionDefinition接口被用于Spring事物支持的核心PlatformTransactionManager接口, ...

  9. Jmeter 中 Bean Shell 之全局变量

    1.新建测试计划>线程组 > http 请求 -登录 获取token , 可以参照我以前写的这篇博客 https://www.cnblogs.com/cyit/p/12632445.htm ...

  10. idea打包或编译错误,错误为c盘idea路径某些文件被占用(非idea文件,项目生成的文件)

    方法列表(2的效果可能更好) 1.将被占用的文件删除之后,重新打包或编译. 2.多编译几次项目. 3.发现真正可能的原因.(貌似被南航企业版360拦截了,导致targe或maven等文件被占用问题) ...