zoukankan      html  css  js  c++  java
  • iOS-UIControls介绍

    iOS-UIControls类介绍

    UIControl的继承关系

    UIControl是 UIKit中UISwitch(开关)、UIButton(按钮)、UISegmentedControl(分段控件)、UISlider(滑块)、UITextField(文本字段控件)、UIPageControl(分页控件)等控件的父类。同时UIControl也是UIView的子类,当然它也是UIResponse的子类。

    下面是UIControl的关系图

    UIControl的作用

    • 从上面的关系图中,我们可以看到,UIControl是UIView的子类,因此我们可以像编写UIView一样编写控件,可以调用addSubview:等方法。

    • 同时他也是UIResponse的子类,也是一个响应者。当对屏幕触发一个点击事件,事件通过响应链传到UIContol的子类上。此时将触发以下事件:

      1. UIResponder父类中触发手势方法(如touchBegan:withEvent)
      2. UIControl对UIResponse中的手势方法进行封装,转换成一个简单的事件。通过指定的事件处理机制,调用对应的方法。

      因此,简单的理解就是,UIControl把复杂的触摸事件封装成了简单的易于使用的控件事件。例如通过UIControl对象处理后,按下按钮的事件就被封装成一个控件事件,而不用去判断触摸屏幕的整个操作过程。
      例如按钮的单击事件:UIControlEventTouchUpInside

    UIControl-Tracking属性介绍

    查看UIControl的声明文件,发现有一个属性不太理解,这里特别来说明一下:

    @property(nonatomic,readonly,getter=isTracking) BOOL tracking;
    
    **解释**
    A Boolean value that indicates whether the receiver is currently tracking touches related to an event. (read-only)
    The value is YES if the receiver is tracking touches; otherwiseNO.
    
    **我的理解**
    属性含义:track--跟踪。顾名思义就是当对手势进行跟踪时,此属性为yes。即对control控件使用pan,pinch手势时,此属性为yes。
    
    属性作用:tracking为read-only,只可以观察。用来查看control控件是否处于跟踪手势状态。

    既然tracking属性为read-only,只读属性。那么,我们通过什么来控制跟踪状态,我们又通过什么来对pan,pinch手势进行响应呢?

    在声明文件tracking下方,有这4个方法,我们可以通过这4个方法来响应手势。

    - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
    - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
    - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
    - (void)cancelTrackingWithEvent:(UIEvent *)event;

    UIControl自定义控件

    自定义滑动进度条按钮,用到了tracking跟踪属性,也触发了一个事件消息。

    代码比较简单,我在这个不具体说明了。下面是效果图:

    代码地址:

    http://download.csdn.net/detail/daiyibo123/9158095

    转载地址

    http://blog.csdn.net/ryantang03/article/details/7754597

    http://blog.csdn.net/iukey/article/details/7300412

  • 相关阅读:
    WPF如何判断PNG中的点是透明的
    Silverlight DataGrid自适应数据
    DEVExpress For WPF 中GridControl如何实现滚动分页(延迟查询)
    如何通过样式来处理根据自身其他属性内容赋值其他属性值的方法研究
    最近涉及到的一些需要备忘的东西
    (转载)Setup Factory 会话变量
    (转载)解决WPF动画属性锁死问题
    WPF InkCanvas MouseDown及MouseLeftButtonDown事件不触发的代替事件
    在win7与XP系统下 C#缺省路径不同
    Xamarin笔记
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026868.html
Copyright © 2011-2022 走看看