基础 (十) : UIView常见属性

基础 (十) : UIView常见属性_第1张图片
未命名图片.png
基础 (十) : UIView常见属性_第2张图片
未命名图片1.png
基础 (十) : UIView常见属性_第3张图片
未命名图片2.png

如何修改控件状态

如何修改控件的状态呢?方法很简单:

每一个UI控件都是一个对象

修改UI控件的状态,其实就是修改控件对象的属性

比如修改UILabel显示的文字,就修改UILabel对象的text属性即可

比如修改UIImageView显示的图片,就修改UIImageView对象的image属性即可

不难想到,每一个UI控件肯定都有很多属性,比如:

UIProgressView进度条控件有progress属性(进度值)

UILabel和UITextField都有text属性(显示文字)

……

虽然,每一个UI控件都有自己的独特属性,但是有些属性是每个UI控件都具备的,比如每一个UI控件都有自己的位置和尺寸、都有自己的父控件、子控件。于是,所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中,比如:

frame :位置和尺寸

center :中心点位置

……

UIView的常见属性

@property(nonatomic,readonly) UIView *superview;

获得自己的父控件对象

@property(nonatomic,readonly,copy) NSArray *subviews;

获得自己的所有子控件对象

@property(nonatomic) NSInteger tag;

控件的ID(标识),父控件可以通过tag来找到对应的子控件

@property(nonatomic) CGAffineTransform
transform;

控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)

@property(nonatomic) CGRect frame;

控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)

可以定义控件的位置(origin)和大小(size)

@property(nonatomic) CGRect bounds;

控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)

注意:如果没有设置位置的情况下,把自己的左上角放在控制器的中心点

可以定义控件的大小W H(size)

@property(nonatomic) CGPoint center;

控件中点的位置(以父控件的左上角为坐标原点)

可以定义控件的位置X Y(center)

基础 (十) : UIView常见属性_第4张图片
未命名图片4.png

UIView的常见方法

  • (void)addSubview:(UIView *)view;
    添加一个子控件view

  • (void)removeFromSuperview;
    从父控件中移除

  • (UIView *)viewWithTag:(NSInteger)tag;
    根据一个tag标识找出对应的控件(一般都是子控件)

常用的Xcode插件
Xcode插件大全
http://www.cocoachina.com/industry/20130918/7022.html

必备
文档注释生成:https://github.com/onevcat/VVDocumenter-Xcode
自动检索图片名:https://github.com/ksuther/KSImageNamed-Xcode
插件管理工具:https://github.com/mneorr/Alcatraz

移除插件(可以使用上面提到的插件管理工具Alcatraz)
到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins文件夹中删除

插件失效修复:http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/

基础 (十) : UIView常见属性_第5张图片
未命名图片3.png

********************笔记**********************


1.监听:监视我们的肢体按下(点击)哪个按钮(可以被点击的东西)事件(系统调用的是那个方法)

2.storyboard: 描述软件界面的, 目前理解: 应用程序一启动就会加载这个文件

3.文字 是使用UILabel 按钮使用 UIButton 创建对象

4.控制器 : 控制器就是继承自UIViewController控制器就是管理"当前的软件界面"的所有事件(点击,拖拽)

5.IBAction 返回值相当于void 能让storyboard中的控件跟(方法)代码进行连线

  1. 连线:
    why:当按钮需要"控制器"处理某些事件的时候,那么这个处理就应该交给控制器的方法来做

what:只有在方法返回类型是IBAction的情况下,才能连线

how:首先 方法的返回值必须是IBAction 按xcode上右上角的双环按钮,直接脱线

  1. 常见错误
    reason:'[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label.'

这个情况一般是: 属性(label)之间连线,属性不存在,但是线还在

其他情况kvc:
reason:'-[ViewController blueClick]: unrecognized selector sent to instance 0x7ffd63828e90'
找不到按钮的方法(不可识别的方法)(blueClick)

  1. 拷贝的时候会直接把线也一起copy(注意点)

  2. 分类和类扩展
    类扩展:可以扩展属性,成员变量,方法,一般情况下属性都是放在类扩展内,苹果官方也是这么建议的(没必要让外界知道封装性)
    分类:只能扩展方法

  3. storyboard 应用程序已启动就会加载main.storyboard
    , 创建箭头指向的控制器,初始化控制器内部的所有UI(UI进阶会讲app的启动原理)
    注意点:类型不匹配不能连线

11.superview: 获取当前的控件的父控件 (获取到调用者(谁调用的谁就是调用者)父控件) self.btn.superview self.btn 就是调用者

12.subviews :获取当前控件的所有子控件, 返回一个装满控件的数组获取调用者的所有子空间
self.purpleView.subviews
self.purpleView 就是调用者

13.addSubView: 添加一个子控件,添加到调用者身上(谁调用这个方法那么谁就是调用者)

14.removeFromSuperview:从父控件把当前(调用者)控件移除

[xiaojian removeFromSuperview]
[liuqi addSubView:xiaojian]

15.viewWithTag: 根据调用内部子空间的tag找出对应的子控件

          1. 直接子控件

          2. 按顺序找子空间内部的所有自控,然后找后面自控件的所有子控件 

16.frame 既能设置尺寸也能设置位置
设置控件在父控件中的尺寸和位置

17.bounds 只能设置尺寸

设置控件在父控件中的尺寸

如果没有位置的话,那么使用自己的中心放在左上角

18.center 只能设置位置

设置控件的中心点在父控件中的位置

  1. OC 不允许直接修改对象的 结构体的 成员的 属性

解决的方案 command + ]
来一个临时的frame 存储对象的frame

CGRect tempFrame = self.myBtn.frame;

  直接改变临时的frame

tempFrame.origin.y -= 10;

  赋值给对象的frame

self.myBtn.frame = tempFrame;



  1. UILabel
  1. text 设置label的文字
  1. textcolor 设置label的文字颜色
  1. textAlignment 对齐方式
  1. numberOfLines 换行个数 0 "自动换行"
  1. linesBreakMode 缩进方式 ...abc abc... a..bc
  1. font 字体大小和样式 (系统默认样式, 斜体样式,粗体样式)

    font  系统默认样式  斜体   粗体
    

    系统样式

    label.font = [UIFont systemFontOfSize:19.0f];
    

    粗体

    label.font = [UIFont boldSystemFontOfSize:24.0f];

    斜体
    label.font = [UIFont italicSystemFontOfSize:24.0f];

  2. imageView

contentMode 

拉伸至填充整个UIImageView
UIViewContentModeScaleToFill,

等比例拉伸 至自适应
UIViewContentModeScaleAspectFit,

    等比例拉伸  至填充     

UIViewContentModeScaleAspectFill,

    不拉伸  不缩放 显示位置     

UIViewContentModeCenter,

UIViewContentModeTop,

UIViewContentModeBottom,

UIViewContentModeLeft,

UIViewContentModeRight,

UIViewContentModeTopLeft,

UIViewContentModeTopRight,

UIViewContentModeBottomLeft,

UIViewContentModeBottomRight,

  1. 缓存

    UIImage*img = [UIImage imageNamed:iconName];

  通过这种方式一定有缓存

使用imageWithContentsOfFile 没有缓存 用完就干掉

用完了 必须替换图片

  1. bundle

就是一个文件

mainbundle 资源文件夹 里面装的是所有资源文件

5.images.xcassets 可以更改图片的属性 不能获取全路径(因为它是一个压缩包)

  不考虑缓存


  经常使用的

直接放在项目里 可以获取全路径 但是不能改图片的属性

  考虑缓存


  不经常使用
  1. UIButton
  1. 不能直接给按钮的titleLabel/ imageView赋值
  因为这样赋值按钮不知道  你需要是给它的那个状态下的属性赋值

2. [btn addTarget:self action:@selector(click:)

forControlEvents:UIControlEventTouchUpInside];

    当触发了UIControlEventTouchUpInside

事件之后 调用 控制器(self) 的
click方法

  1. 任何继承自UIControl的类都可以使用addTarget方法

[sender isKindOfClass:[UIButton class]]

  判断sender的类型是否匹配
  1. 按钮模糊(蒙版)的效果是因为按钮是system
  1. self.purpleView.subviews 0.1.2.3.4.5.6(addSubview的情况下)
  1. index%3 = cos
    index/3 = row
  1. 思路:
  1. 搭建软件界面
  1. 监听按钮的点击, 点击添加往紫色view中添加一个控件
  1. 设置位置
  1. 获取下标


  2. 根据下标计算cos  row


  3. cos 决定x   row  决定是y


  4. 添加一个黑色view,而这个view中包含两个自控件(图片,名称)


  5. x, y 只决定view  (不决定里面的子空间,子控件位置相对黑色的view)


      黑色的子控件建议: x都是0 ,图片的y 也0  名称的y 等于

图片的高

  6. 设置数据


      采取的懒加载, 用到的时候再加载


      1. 创建两个数组


      2. 创建一个装满字典的数组


  颜色 一般情况  是用来调试的

你可能感兴趣的:(基础 (十) : UIView常见属性)