UIButton

 //1.设置UIButton 的左右移动
.center属性 获得 CGPoint 来修改x y
//1.设置UIButton 的放大缩小
bounds属性 获得CGRect 然后通过size.height设置高 wight设置宽
//3.或者使用frame 来设置空间的 移动以及大小

代码创建一个UIButton

     // 1.创建一个按钮
UIButton *btn = [[UIButton alloc] init]; // 2.添加按钮
[self.view addSubview:btn]; // 3.设置按钮的frame
btn.frame = CGRectMake(, , , ); // 4.给按钮的默认状态和高亮状态设置背景图片
[btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"btn_02"] forState:UIControlStateHighlighted]; // 5.给按钮的默认状态和高亮状态分别设置文字和文字的颜色
[btn setTitle:@"点我啊" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [btn setTitle:@"摸我干啥" forState:UIControlStateHighlighted];
[btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; // 6.给按钮添加一个点击事件,监控按钮的点击
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; - (void)btnClick:(UIButton *)btn
{
NSLog(@"btnClick");
}

简易动画

 //简易动画的创建有两种方式
//1.头尾式
[UIView beginAnimations : nil context:nil];//开启动画
[UIView setAnimationDuration:];//设置动画执行时间
//这里写入需要执行动画的代码
[UIView commitAnimations];//提交动画 //2.Block式
[UIView animateWithDuration: 0.5 animations:^{ //这里写入一个需要执行的动画代码
}];

transform

 //利用transform 可以修改空间的位移(位置)、缩放、旋转

 //创建一个transform属性
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
(注意:angle是弧度制,并不是角度制) //在某个transform的基础上进行叠加
CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle); //清空之前设置的transform属性
view.transform = CGAffineTransformIdentity; 例如: @interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *btnIcon;
// 移动
- (IBAction)move; // 旋转
- (IBAction)rotate; // 缩放
- (IBAction)scale;
- (IBAction)goBack:(id)sender; @end - (IBAction)move { // 2. 修改结构体值
// 下面这句话的意思是:告诉控件, 平移到距离原始位置-50的位置
//self.btnIcon.transform = CGAffineTransformMakeTranslation(0, -50); // 向上平移 // 基于一个旧的值, 在进行平移
// 基于现有的一个值, 再进行平移
self.btnIcon.transform = CGAffineTransformTranslate(self.btnIcon.transform, , );
} - (IBAction)rotate {
// 45°
//self.btnIcon.transform = CGAffineTransformMakeRotation(-M_PI_4); [UIView animateWithDuration:2.5 animations:^{
self.btnIcon.transform = CGAffineTransformRotate(self.btnIcon.transform, -M_PI_4);
self.btnIcon.transform = CGAffineTransformTranslate(self.btnIcon.transform, , );
self.btnIcon.transform = CGAffineTransformScale(self.btnIcon.transform, 1.5, 1.5);
}]; } // 缩放
- (IBAction)scale {
//self.btnIcon.transform = CGAffineTransformMakeScale(0.5, 0.5);
self.btnIcon.transform = CGAffineTransformScale(self.btnIcon.transform, 1.5, 1.5);
} // 让控件回到原始的位置
- (IBAction)goBack:(id)sender {
self.btnIcon.transform = CGAffineTransformIdentity;
}
@end

UIImageView

 利用一个小案例来说明image的属性
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imgViewCat; - (IBAction)drink; - (IBAction)fart; - (IBAction)knockout; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// 喝牛奶的动画
- (IBAction)drink { [self startAnimating: picName:@"drink"];
} // 放P
- (IBAction)fart { [self startAnimating: picName:@"fart"];
} // 敲头
- (IBAction)knockout {
[self startAnimating: picName:@"knockout"];
} // 执行动画的方法
- (void)startAnimating:(int)count picName:(NSString *)picName
{
// 如果当前图片框正在执行动画, 那么直接return, 什么都不做(没有开启一个新动画)
if (self.imgViewCat.isAnimating) {
return;
} // 1. 把图片加载到数组中
// 0.动态加载图片到一个NSArray中
NSMutableArray *arrayM = [NSMutableArray array]; for (int i = ; i < count; i++) {
// 拼接图片名称
NSString *imgName = [NSString stringWithFormat:@"%@_%02d.jpg", picName, i]; // 根据图片名称加载图片
// 通过imageNamed: 这种方式加载图片, 加载好的图片会一直保存写在内存中, 不会释放.这样下次如果再使用同样的图片的时候就不需要再重新加载了, 因为内存里面已经有了。缺点就是: 如果加载了大量的图片, 那么这些图片会一直保留在内存中,导致应用程序占用内存过大(这就叫缓存) // 使用这种方式加载图片, 加载起来的图片即便没有强类型指针引用也不会销毁(会被缓存)
//UIImage *imgCat = [UIImage imageNamed:imgName]; // 使用下面这种方式加载的图片, 只要没有强类型指针引用就会被销毁了
// 解决: 换一种加载图片的方式, 不要使用缓存
// 获取图片的完成的路径
NSString *path = [[NSBundle mainBundle] pathForResource:imgName ofType:nil]; // 这里的参数不能再传递图片名称了, 这里需要传递一个图片的完整路径
UIImage *imgCat = [UIImage imageWithContentsOfFile:path]; // 把图片加载到数组中
[arrayM addObject:imgCat];
} // 2. 设置UIImageView的animationImages属性为对应的图片集合
self.imgViewCat.animationImages = arrayM; // 3. 动画持续时间
self.imgViewCat.animationDuration = self.imgViewCat.animationImages.count * 0.1; // 4. 重复次数
self.imgViewCat.animationRepeatCount = ; // 5. 启动动画
[self.imgViewCat startAnimating]; // 清空图片集合
// 这样些写的问题是, 当动画启动以后, 动画还没开始执行, 就已经让图片集合清空了, 也就是说self.imgViewCat.animationImages 里面已经没有图片了, 所以动画就不执行了。
//self.imgViewCat.animationImages = nil; // self.imgViewCat.animationImages = nil; 需要延迟一段时间执行, 当动画执行完毕以后再清空这些图片
//[self.imgViewCat setAnimationImages:nil]; // 设置图片框在调用setAnimationImages:nil方法的时候延迟执行
[self.imgViewCat performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imgViewCat.animationImages.count * 0.1];
} @end

IOS(二)基本控件UIButton、简易动画、transform属性、UIImageView的更多相关文章

  1. iOS开发基础控件--UIButton

    01 //这里创建一个圆角矩形的按钮 02     UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 03 ...

  2. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  3. winform窗体(二)——控件

    一.窗体的事件 每一个窗体都有一个事件,这个窗体加载完成之后执行哪一段代码 位置:1)右键属性→事件→load 双击进入 2)双击窗体任意一个位置进入 删除事件:先将事件页面里面的挂好的事件删除,再删 ...

  4. 无比迅速敏捷地开发iOS超精美控件

    目录 前言 设计 编码 PaintCode 前言 自从人生第一篇博客<iOS中的预编译指令的初步探究>问世以来 浏览量竟然达到了360多,(路过的大神勿笑!)这些浏览量使我兴奋异常但又令我 ...

  5. 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件

    转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...

  6. 【javaFX学习】(二) 控件手册

    这里写的控件可能不是所有的控件,但是应该是比较齐全并足够用的了,后面还有图表类的,3d模型类,放在后面来写吧,太多了.javafx的功能比以前想象中的要强大.而且也很方便,所有的控件写完后再用Scen ...

  7. uwp - 控件精确移动动画

    原文:uwp - 控件精确移动动画 先看效果图: 一共有8个GRID,黄色的负责移动,其他7个负责定位.新建一个页面page,替换默认代码: <UserControl.Resources> ...

  8. wpf控件开发基础(5) -依赖属性实践

    原文:wpf控件开发基础(5) -依赖属性实践 知识回顾 接上篇,回顾这三篇讲了什么东西 首先说明了属性的现存问题,然后介绍了依赖属性的基本用法及其解决方案,由于依赖属性以静态属性的方式存在,进而又介 ...

  9. [习题]日历(Calendar)控件的障眼法(.Visible属性),使用时才出现?不用就消失?

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/09/02/calendar_icon_visible.aspx [习题]日历(Cal ...

随机推荐

  1. Eclipse配置Struts2.x

    问了我同学现在JavaWeb主流框架是哪些.他说基本框架是SSH,struts2+spring+hibernate,流行的是SSM,springmvc+spring+mybatis,原本计划学下Str ...

  2. iOS开发之计算文字尺寸

    /** *  计算文字尺寸 * *  @param text    需要计算尺寸的文字 *  @param font    文字的字体 *  @param maxSize 文字的最大尺寸 */ - ( ...

  3. es6 箭头函数(arrow function) 学习笔记

    箭头函数有两个好处. 1.他们比传统函数表达式简洁. const arr = [1, 2, 3]; const squares = arr.map(x => x * x); // 传统函数表达式 ...

  4. Alamofire源码解读系列(九)之响应封装(Response)

    本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然, ...

  5. MCMC(一)蒙特卡罗方法

    MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链(待填坑) MCMC(三)M-H采样和Gibbs采样(待填坑) 作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Ca ...

  6. Linux命令--su与sudo

    su(switch user)命令的作用:切换用户,一般是普通用户与root用户之间的切换.例:>su                #输入su命令Password:      #提示输入密码 ...

  7. Yii2高级模板vendor和application非同级目录部署

    上面是Yii2的高级模板,当我们有多个application的时候,这种高级模板可以可以提供很好的扩展性,多个application共用一份YII2框架,默认情况下,框架和application是在同 ...

  8. Apache Mina入门实例

    一.mina是啥 ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的 ...

  9. 转接口IC GM7122:BT656转CVBS芯片 视频编码电路

    1 概述    视频编码电路主要实现接收8位CCIR656格式的YUV数据,(例如MPEG解码数据),并编码成CVBS信号,经过D/A转换后输出.基本的编码功能包括副载波产生,色差信号调制,同步信号内 ...

  10. 在Selenium Webdriver中使用XPath Contains、Sibling函数定位

    前言 在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了. 在这种情况下,我们需要使用xpath1.0内 ...