一、简单说明

一般情况下,点击某个控件后,会做出相应反应的都是按钮

按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置

二、按钮的三种状态

1、 normal(普通状态)

默认情况(Default)

对应的枚举常量:UIControlStateNormal

2、 highlighted(高亮状态)

按钮被按下去的时候(手指还未松开)

对应的枚举常量:UIControlStateHighlighted

3、 disabled(失效状态,不可用状态)

如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击

对应的枚举常量:UIControlStateDisabled

三、注意点

(1)从Xcode5开始,图片资源都放到Images.xcassets中进行管理,可以使用拖拽的方式添加项目中用到的图片到Images.xcassets中

(2)若干多个控件共用一段代码,通常使用tag。

四、代码示例

(1)

#import "LFViewController.h"@interface LFViewController ()@property (weak, nonatomic) IBOutlet UIButton *headImageView;@end@implementation LFViewController// 在OC中,绝大多数的控件的监听方法的第一个参数就是控件本身
//- (IBAction)left:(UIButton *)button {
//
//    NSLog(@"----");
//}
- (IBAction)move
{// 通过frame修改head的位置// 在OC中,不允许直接修改“对象”的“结构体属性”的“成员”// 允许修改“对象”的“结构体属性”// 1. 取出结构体属性CGRect rect = self.headImageView.frame;// 2. 修改结构体成员rect.origin.y -= 20;// 3. 设置对象的结构体属性self.headImageView.frame = rect;
}

(2)

#import "LFViewController.h"/**使用git1. 创建项目时,勾选git2. 开发告一段落后,选择"Source Control""Commit",并编写注释*/// 枚举类型实质上就是一个整数,作用就是用来替代魔法数字
// 枚举类型中,指定了第一个整数之后,后面的数字会递增
typedef enum
{kMovingDirTop = 10,kMovingDirBottom,kMovingDirLeft,kMovingDirRight,
} kMovingDir;#define kMovingDelta 50@interface LFViewController ()@property (weak, nonatomic) IBOutlet UIButton *headImageView;@end@implementation LFViewController- (IBAction)move:(UIButton *)button
{
//    CGRect rect = self.headImageView.frame;CGPoint p = self.headImageView.center;// magic number魔法数字,其他程序员看到代码的时候,不知道是什么意思switch (button.tag) {case kMovingDirTop:p.y -= kMovingDelta;break;case kMovingDirBottom:p.y += kMovingDelta;break;case kMovingDirLeft:p.x -= kMovingDelta;break;case kMovingDirRight:p.x += kMovingDelta;break;}[UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:1.0];self.headImageView.center = p;[UIView commitAnimations];
}- (IBAction)zoom:(UIButton *)button
{CGRect rect = self.headImageView.bounds;// 在C语言中,关于bool的判断:非零即真if (button.tag) {rect.size.width += 50;rect.size.height += 50;} else {rect.size.width -= 50;rect.size.height -= 50;}// 首尾动画// beginAnimations表示此后的代码要“参与到”动画中
    [UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:2.0];self.headImageView.bounds = rect;
//    self.headImageView.alpha = 0;// commitAnimations,将beginAnimation之后的所有动画提交并生成动画
    [UIView commitAnimations];
}@end

五、补充笔记

1. IBAction的参数

- (IBAction)left:(UIButton *)button

(1) 在OC中,绝大多数的控件监听方法的第一个参数就是控件本身

(2) 默认连线时的参数类型是id

(3) 如果要在监听方法中,方便控件的使用,可以在连线时或者连线后,修改监听方法的参数类型

2. 修改对象的结构体成员

在OC中,不允许直接修改“对象”的“结构体属性”的“成员”,但是允许修改“对象”的“结构体属性”

修改结构体属性的成员方法如下:

(1)使用临时变量记录对象的结构体属性

(2) 修改临时变量的属性

(3)将临时变量重新设置给对象的结构体属性

3. 在程序开发中需要避免出现魔法数字(Magic Number)

使用枚举类型,可以避免在程序中出现魔法数字

(1)枚举类型实质上就是一个整数,其作用就是用来替代魔法数字

(2)枚举类型中,指定了第一个整数之后,后面的数字会递增

4. frame & bounds & center

1> frame可以修改对象的位置和尺寸

2> bounds可以修改对象的尺寸

3> center可以修改对象的位置

5. 首尾式动画

// beginAnimations表示此后的代码要“参与到”动画中

[UIView beginAnimations:nil context:nil];

// setAnimationDuration用来指定动画持续时间

[UIView setAnimationDuration:2.0];

self.headImageView.bounds = rect;

......

// commitAnimations,将beginAnimation之后的所有动画提交并生成动画

[UIView commitAnimations];

转载于:https://www.cnblogs.com/leji-28/p/4979227.html

iOS开发UI篇——Button基础相关推荐

  1. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  2. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  3. iOS开发UI篇-在UItableview中实现加载更多功能

    iOS开发UI篇-在UItableview中实现加载更多功能 一.实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据. 二.实现代码和说明 当在页面(视图部分)点击加载更多按钮的时 ...

  4. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  5. iOS开发UI篇—UIWindow简单介绍

    iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...

  6. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇-简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  7. iOS开发UI篇—实现UITableview控件数据刷新

    iOS开发UI篇-实现UITableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...

  8. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇-UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  9. iOS开发UI篇—懒加载

    iOS开发UI篇-懒加载 1.懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

最新文章

  1. acm数论之欧几里得gcd
  2. 《浙江省推动数据中心能效提升行动方案(2021-2025年)》出炉
  3. z.lua 1.7.0 发布,快速回到历史路径,支持 ranger / fz
  4. if else和switch的效率
  5. 企业效益真的向好么?
  6. php中unset函数是在哪一章_PHP unset函数好奇怪 -
  7. 计算机电缆头子怎么做,电缆头制作怎么算量怎么套定额
  8. 主从reactor模式
  9. linux 手动修复分区表,分区表修复
  10. android 不透明度
  11. ffmpeg视频裁剪,切割,crop裁剪相关
  12. 将中文汉字转换成拼音
  13. 安装SSMS报错:0x80070643
  14. 获取android设备唯一编号_如何获取Android设备唯一标识码教程
  15. CSDN学霸课表——系统集成项目管理工程师(软考中级)
  16. Python编程:实现词云生成(附详细源码)
  17. 什么是websocket
  18. 用NT52的boot.ini引导NT60启动Windows7
  19. 找出1000以内的完数Java
  20. 为什么开发Java Web都要用框架

热门文章

  1. 使用Grunt构建任务管理脚本(转)
  2. 人一生中最大的遗憾应该是什么
  3. iamond operator is not supported in -source 1.5
  4. RSA key format is not supported
  5. hexo右下角弄一个live2d的卡通动画小人
  6. CentOS下面service mysqld start出现[failed]情况
  7. 大话数据结构15 : 线索二叉树
  8. kudu 存储引擎简析
  9. 《数据结构》—— 串,KMP模式算法(转载)
  10. php爬虫:知乎用户数据爬取和分析