zoukankan      html  css  js  c++  java
  • iOS开发UI篇—Button基础

    1.15

    1、UI开发就是放置对象,而这些对象就是控件
    控件、组件
    2、开发非UI功能,使用框架
    3、开发应用的第一根步骤
    -> 界面上看需要什么东西
    -> 打开Xcode,新建项目
    shift + command + n 新建一个项目
    www.itcast.cn
    4、OC中我们的类名一般有前缀
    NSString
    NSArray
    在其他的开发语言中为了避免名字的冲突,常常提供命名空间
    在OC中没有命名空间,取而代之的是类前缀
    新建项目以后,修改右面的 prefiex 属性
    5、模拟器需要注意的
    -> 尺寸
    -> 旋转
    -> home键
    6、图标
    M method
    C class
    7、Xcode
    运行的快捷键:cmd + r
    编译不运行:cmd + b
    结束运行:cmd + .

    8、加法计算器
    -> 拖控件,需要设置控件显示的时候,设置属性
    -> 文本框:UITextField
    -> 文本标签:UILabel
    -> 按钮:UIButton
    -> 设置键盘类型,Keyboard Type

    9、UIVIew与UIVIewController
    可以看到的都是UIView
    UIView的维护由 UIViewController 完成

    10、如果需要监听一个控件的用户操作
    -> 在控制器中提供一个方法,方法的返回值是IBAction
    -> 打开Assistent窗口,选中控件右键
    -> 点击事件是 Touch Up inside
    -> 选中事件右边的圆圈,连线方法

    11、处理一般应用的步骤


    12、退出键盘
    -> 第一响应者
    -> 两个方法
    1、退出键盘只需要设置叫出键盘的控件不再是
    第一响应者即可
    2、如果调出键盘的控件都是在同一个UIView中
    只需要设置这个UIView结束编辑即可

    13、拖线自动生成方法或属性
    -> 选中控件,按下 control
    -> 拖入代码中,弹出一个对话框
    -> 如果需要的是属性,不需要修改,直接设置名字即可
    -> 如果需要方法,首先修改Outlet为Action
    然后填写名字,设置参数
    方法带有参数,那么在触发该事件的时候,首先会检查
    方法是否带有id类型的参数,如果带有参数会将被触发
    的控件传入方法


    ================
    1、创建一个项目的步骤
    -> 搭建界面(看需要什么控件,拖入控件)
    -> 控件的外观需要设置属性
    -> 如果需要监听事件需要拖线方法
    2、拖线的方法
    -> 拖线属性
    -> 拖线方法
    3、常用的控件与属性
    按钮:UIButton
    文本标签:UILabel
    text
    文本框:UITextField
    text
    ===================

    14、私有扩展、分类、非正式协议、类别
    写一个类
    @interface 类名()

    @end
    option + 华键 + shift + 左键

    15、在iOS中,所有的控件的位置,都是利用控件所在
    的矩形框的左上角的点为基准

    在iOS中(所有的计算机视图中)都是以左上角为原点
    水平向右为x轴正方向
    竖直向下为y轴正方向

    16、简单动画
    UIView 提供了一个animation的方法可以实现动画
    [UIView beginAnimations:nil context:nil];
    需要执行的代码
    [UIVIew commitAnimations];

    17、frame
    frame用来描述控件的位置与大小
    设置frame 属性中的 origion 可以设置其位置
    设置frame 属性中的 size 可以设置他的大小

    注意:设置frame的步骤:1、取出来;2、修改;3、赋值回去

    18、bounds属性和center属性也可以完成修改大小与位置的操作
    bounds只用来设置大小
    bounds属性的数据类型也是CGRect
    bounds的x,y永远以自己的左上角为基准,一般都是0
    一般使用的时候,都是用来设置其宽高的
    center只用来设置位置
    center是控件的中心位置,就是控件所在矩形区域的中心位置

    19、transform 变换、形变、矩阵变换
    比喻:变换就是要控件从原来的状态,变成指定的状态
    btn.transform = tf1; // tf1 向上100
    ....
    btn.transform = tf2; // tf2 向左100
    // 如果赋值了另一个变换,就是表明原来的变换不起作用了,重新
    // 从原来的位置变到新位置

    affine 仿射变换

    20、利用代码创建控件

    1.IBAction:

    1> 能保证方法可以连线

    2> 相当于void

    2.IBOutlet:

    1> 能保证属性可以连线

    3.常见错误

    setValue:forUndefinedKey:]: this class is not key value coding

    错误原因是:连线出问题了

    4.Xcode5开始的一些建议

    把用于连线的一些方法和属性声明在.m文件的类扩展中

    5.framecenterounds

    1> frame:能修改位置和尺寸

    2> center:能修改位置

    3> bounds:能修改尺寸(xy一般都是0)

    iOS开发UI篇—Button基础

    一、简单说明

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

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

    二、按钮的三种状态

    normal(普通状态)

    默认情况(Default)

    对应的枚举常量:UIControlStateNormal

    highlighted(高亮状态)

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

    对应的枚举常量:UIControlStateHighlighted

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

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

    对应的枚举常量:UIControlStateDisabled

    三、注意点

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

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

    四、代码示例

    (1)

    复制代码
     1 #import "LFViewController.h"
     2 
     3 @interface LFViewController ()
     4 
     5 @property (weak, nonatomic) IBOutlet UIButton *headImageView;
     6 
     7 @end
     8 
     9 @implementation LFViewController
    10 
    11 // 在OC中,绝大多数的控件的监听方法的第一个参数就是控件本身
    12 //- (IBAction)left:(UIButton *)button {
    13 //    
    14 //    NSLog(@"----");
    15 //}
    16 - (IBAction)move
    17 {
    18     // 通过frame修改head的位置
    19     // 在OC中,不允许直接修改“对象”的“结构体属性”的“成员”
    20     // 允许修改“对象”的“结构体属性”
    21     // 1. 取出结构体属性
    22     CGRect rect = self.headImageView.frame;
    23     // 2. 修改结构体成员
    24     rect.origin.y -= 20;
    25     // 3. 设置对象的结构体属性
    26     self.headImageView.frame = rect;
    27 }
    复制代码

    (2)

    复制代码
     1 #import "LFViewController.h"
     2 
     3 /**
     4  使用git
     5  
     6  1. 创建项目时,勾选git
     7  2. 开发告一段落后,选择"Source Control""Commit",并编写注释
     8  */
     9 
    10 
    11 // 枚举类型实质上就是一个整数,作用就是用来替代魔法数字
    12 // 枚举类型中,指定了第一个整数之后,后面的数字会递增
    13 typedef enum
    14 {
    15     kMovingDirTop = 10,
    16     kMovingDirBottom,
    17     kMovingDirLeft,
    18     kMovingDirRight,
    19 } kMovingDir;
    20 
    21 #define kMovingDelta 50
    22 
    23 @interface LFViewController ()
    24 
    25 @property (weak, nonatomic) IBOutlet UIButton *headImageView;
    26 
    27 @end
    28 
    29 @implementation LFViewController
    30 
    31 - (IBAction)move:(UIButton *)button
    32 {
    33 //    CGRect rect = self.headImageView.frame;
    34     CGPoint p = self.headImageView.center;
    35     
    36     // magic number魔法数字,其他程序员看到代码的时候,不知道是什么意思
    37     switch (button.tag) {
    38         case kMovingDirTop:
    39             p.y -= kMovingDelta;
    40             break;
    41         case kMovingDirBottom:
    42             p.y += kMovingDelta;
    43             break;
    44         case kMovingDirLeft:
    45             p.x -= kMovingDelta;
    46             break;
    47         case kMovingDirRight:
    48             p.x += kMovingDelta;
    49             break;
    50     }
    51 
    52     [UIView beginAnimations:nil context:nil];
    53     [UIView setAnimationDuration:1.0];
    54     
    55     self.headImageView.center = p;
    56     
    57     [UIView commitAnimations];
    58 }
    59 
    60 - (IBAction)zoom:(UIButton *)button
    61 {
    62     CGRect rect = self.headImageView.bounds;
    63     
    64     // 在C语言中,关于bool的判断:非零即真
    65     if (button.tag) {
    66         rect.size.width += 50;
    67         rect.size.height += 50;
    68     } else {
    69         rect.size.width -= 50;
    70         rect.size.height -= 50;
    71     }
    72  
    73     // 首尾动画
    74     // beginAnimations表示此后的代码要“参与到”动画中
    75     [UIView beginAnimations:nil context:nil];
    76     [UIView setAnimationDuration:2.0];
    77     
    78     self.headImageView.bounds = rect;
    79 //    self.headImageView.alpha = 0;
    80     
    81     // commitAnimations,将beginAnimation之后的所有动画提交并生成动画
    82     [UIView commitAnimations];
    83 }
    84 
    85 @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];

     
  • 相关阅读:
    了解jQuery
    jQuery其他关系查找方法
    jQuery中的入口函数
    漫谈《挪威的森林》
    再说变
    再说鞋
    SDG
    Apache Geode简介
    2021/11/24策略模式
    2021/11/26
  • 原文地址:https://www.cnblogs.com/zhangxiaomeng1991/p/4230957.html
Copyright © 2011-2022 走看看