一、UIControl初识
     1、UIControl是有控制功能的视图(比如UIButton、UISlider、UISegmentedControl等)的父类。
  • 只要跟控制有关的控件都是继承于该类。
  • UIControl这个类通常我们并不直接使用,而是使用其子类。
  • 事件响应的三种形式:基于触摸、基于值、基于编辑:
     2、UIControl常用方法
  参数说明:target为目标对象;action为方法选择器;controlEvents为触发事件
    // 添加一个事件
    - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

    // 移除一个事件
    - (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
     3、Control的事件处理
/**
 *  1.当触摸从控件内部拖动到外部时触发:UIControlEventTouchDragExit
    2.当控件之内触摸抬起时触发:UIControlEventTouchUpInside
    3.当控件之外触摸抬起时触发:UIControlEventTouchUpOutside
    4.触摸取消事件,设备被上锁或者电话呼叫打断:UIControlEventTouchCancel
    5.用户按下时触发:UIControlEventTouchDown
    6.点击计数大于1时触发:UIControlEventTouchDownRepeat
    7.当触摸在控件之内拖动时触发:UIControlEventTouchDragInside
    8.当触摸在控件之外拖动时触发:UIControlEventTouchDragOutside
    9.当触摸从控件之外拖动到内部时触发:UIControlEventTouchDragEnter
    10.当控件的值发生变化时(用于滑块、分段控件等控件):UIControlEventValueChanged
    11.文本控件中开始编辑时:UIControlEventEditingDidBegin
    12.文本控件中的文本被改变:UIControlEventEditingChanged
    13.文本控件中编辑结束时:UIControlEventEditingDidEnd
    14.文本控件内通过按下回车键结束编辑时:UIControlEventEditingDidOnExit
    15.所有触摸事件:UIControlEventAllTouchEvents
    16.文本编辑的所有事件:UIControlEventAllEditingEvents
    17.所有事件:UIControlEventAllEvents
 */
二、UISwitch的使用
     1、UISwitch的继承关系:UISwitch继承于UIControl,通常被叫做开关。
     2、UISwitch的方法(创建和部分常用方法)
  代码示例:
#pragma mark UISwitch
- (void)addSwitch
{
    // 创建对象
    // 设置frame只有origin起作用,size使用系统默认大小
    UISwitch *firstSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(, , , )];
    // 开关风格的颜色
    firstSwitch.tintColor = [UIColor lightGrayColor];
    // 开的时候的颜色
    firstSwitch.onTintColor = [UIColor greenColor];
    // 按钮颜色
    firstSwitch.thumbTintColor = [UIColor grayColor];
    [firstSwitch setOn:YES animated:NO];
    // 添加事件
    [firstSwitch addTarget:self action:@selector(firstAction:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:firstSwitch];
}

// 实现事件
- (void)firstAction:(UISwitch *)sender
{
    if (sender.isOn) {
        sender.thumbTintColor = [UIColor whiteColor];
        NSLog(@"开了");
    }else {
        sender.thumbTintColor = [UIColor grayColor];
        NSLog(@"关了");

    }
}
三、UISlider的使用
     1、UISlider概述
  • UISlider是iOS中的滑块控件。
  • 通常用于控制视频播放进度,控制音量等。
  • 它继承于UIControl,滑块提供了一系列连续的值,滑块停在不同的位置,获取到滑块上的值也不同
     2、UISlider的创建和常用属性
  在RootView.h中声明
@interface RootView : UIView

@property (nonatomic, strong) UISlider *mySlider;
@property (nonatomic, strong) UIImageView *myImageView;

@end

  在RootView.m中实现

#import "RootView.h"

@implementation RootView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // 添加子视图
        [self addAllViews];
    }
    return self;
}

- (void)addAllViews
{
    // 布局slider
    self.mySlider = [[UISlider alloc] initWithFrame:CGRectMake(, , , )];
    // 滑块最小值
    self.mySlider.minimumValue = 0.0;
    // 滑块最大值
    self.mySlider.maximumValue = ;
    [self addSubview:self.mySlider];
    // 设置动图
    self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(, , , )];
    NSMutableArray *imageArray = [NSMutableArray array];
    ; i <= ; i++) {
        NSString *str = [NSString stringWithFormat:@"%d.tiff", i];
        UIImage *image = [UIImage imageNamed:str];
        [imageArray addObject:image];
    }
    // 播放的动画数组
    self.myImageView.animationImages = imageArray;
    // 播放时间
    self.myImageView.animationDuration = ;
    // 开始动画
    [self.myImageView startAnimating];
    // 添加到父视图
    [self addSubview:self.myImageView];
}

  在RootViewController.m中添加滑块滑动事件

#import "RootViewController.h"
#import "RootView.h"
@interface RootViewController ()
@property (nonatomic, strong) RootView *rootView;

@end

@implementation RootViewController

- (void)loadView
{
    self.rootView = [[RootView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = self.rootView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    // 添加滑杆滑动事件
    [self.rootView.mySlider addTarget:self action:@selector(mySliderAction:) forControlEvents:UIControlEventValueChanged];
}

- (void)mySliderAction:(UISlider *)sender
{
    // 设置动图
    self.rootView.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(, , , )];
    NSMutableArray *imageArray = [NSMutableArray array];
    ; i <= ; i++) {
        NSString *str = [NSString stringWithFormat:@"%d.tiff", i];
        UIImage *image = [UIImage imageNamed:str];
        [imageArray addObject:image];
    }
    // 播放的动画数组
    self.rootView.myImageView.animationImages = imageArray;
    // 播放时间
    self.rootView.myImageView.animationDuration = 2.1 - sender.value;
    // 播放次数
    self.rootView.myImageView.animationRepeatCount = ;
    // 开始动画
    [self.rootView.myImageView startAnimating];
    // 添加到父视图
    [self.rootView addSubview:self.rootView.myImageView];
    NSLog(@"%.2f", self.rootView.mySlider.value);
}@end
四、UISegmentedControl的使用
     1、UISegmentedControl的概述
  • UISegmentedControl是iOS中常用的分段控件。
  • 每个segment都能被点击,它相当于继承了若干个button。分段控件提供一栏按钮(有时称为按钮栏),但一个时刻只能激活其中一个按钮。
  • 分段控件会导致用户在屏幕上看到的内容发生变化。它们常被用在不同类别的信息之间选择,或者在切换不同的视图。
     2、UISegmentedControl的创建和常用方法
#import <UIKit/UIKit.h>

@interface Root : UIView
// 分段选择器
@property (nonatomic, strong) UISegmentedControl *segmentControl;

// 图片视图
@property (nonatomic, strong) UIImageView *myImageView;
@property (nonatomic, strong) UIImageView *myImageView1;

@end
#import "Root.h"

@implementation Root

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // 添加视图
        [self addAllViews];
    }
    return self;
}
// 添加视图
- (void)addAllViews
{
    // 创建对象
    self.segmentControl = [[UISegmentedControl alloc] initWithItems:@[@"女神", @"男神", @"程序员"]];
    // 设置属性
    self.segmentControl.backgroundColor = [UIColor grayColor];
    self.segmentControl.frame = CGRectMake(, , , );
    // 指定被选中的分段
    self.segmentControl.selectedSegmentIndex = ;
    self.segmentControl.tintColor = [UIColor colorWithRed: /  alpha:];
    [self.segmentControl setTitle:];
    // 添加到父视图
    [self addSubview:self.segmentControl];
    // 布局图片视图
    self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(, CGRectGetMaxY(self.segmentControl.frame) + , , )];
    // 设置默认图片
    self.myImageView.image = [UIImage imageNamed:@"女神.jpg"];
    [self addSubview:self.myImageView];
}
@end
     3、UISegmentedControl基本样式
     4、UISegmentedControl添加事件
#import "RootViewController.h"
#import "Root.h"
@interface RootViewController ()
@property (nonatomic, strong) Root *root;

@end

@implementation RootViewController
- (void)loadView
{
    self.root = [[Root alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = self.root;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.root.segmentControl addTarget:self action:@selector(segmentControlAction:) forControlEvents:UIControlEventValueChanged];
}

- (void)segmentControlAction:(UISegmentedControl *)sender
{
    NSInteger index = sender.selectedSegmentIndex;
    switch (index) {
        :
            self.root.myImageView.image = [UIImage imageNamed:@"女神.jpg"];
            [self.root addSubview:self.root.myImageView];
            break;
        :
            self.root.myImageView.image = [UIImage imageNamed:@"男神.jpg"];
            [self.root addSubview:self.root.myImageView];
            break;
        :
            self.root.myImageView.image = [UIImage imageNamed:@"屌丝.jpg"];
            [self.root addSubview:self.root.myImageView];
            break;

        default:
            break;
    }
}
@end
五、UIPageControl的使用
     1、UIPageControl概述
UIPageControl控件在程序中出现的比较频繁,尤其在和UIScrollView(滚动视图)配合来显示大量数据时,会使用它来控制UIScrollView的翻页。在滚动ScrollView时可通过PageControll中的小白点来观察当前页面的位置,也可通过点击PageController中的小白点来滚动到指定的页面。    
     2、UIPageControl常用属性和方法
#import "RootViewController.h"

@interface RootViewController ()

@property (nonatomic, strong) UIPageControl *myPage;
@property (nonatomic, strong) UIView *pageView;
@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self addPageControl];
    // 添加事件
    [self.myPage addTarget:self action:@selector(myPageAction:) forControlEvents:UIControlEventValueChanged];

}

#pragma mark - UIPageControl
- (void)addPageControl
{
    self.myPage = [[UIPageControl alloc] initWithFrame:CGRectMake(, self.view.frame.size.height - , self.view.frame.size.width - , )];
    // 设置页数
    self.myPage.numberOfPages = ;
    // 设置当前页
    self.myPage.currentPage = ;
    self.myPage.backgroundColor = [UIColor grayColor];
    //如果是单页就隐藏
    self.myPage.hidesForSinglePage = YES;
    // 选中的圆点颜色
    self.myPage.currentPageIndicatorTintColor = [UIColor whiteColor];
    // 未选中的圆点颜色
    self.myPage.pageIndicatorTintColor = [UIColor blackColor];
    [self.view addSubview:self.myPage];

    self.pageView = [[UIView alloc] initWithFrame:CGRectMake(, self.view.frame.size.height - , , )];
    self.pageView.backgroundColor = [UIColor grayColor];
    [self.view addSubview:self.pageView];
}

// 实现事件
- (void)myPageAction:(UIPageControl *)page
{
    NSInteger index = page.currentPage;
    switch (index) {
        :
            self.pageView.backgroundColor = [UIColor grayColor];
            break;
        :
            self.pageView.backgroundColor = [UIColor cyanColor];
            break;
        :
            self.pageView.backgroundColor = [UIColor blackColor];
            break;
        :
            self.pageView.backgroundColor = [UIColor brownColor];
            break;
        default:
            break;
    }
}
@end
六、总结
     1、UIControl是所有控制视图的父类。
     2、UISwitch的状态监测。
     3、UISlider为滑块控件,通过控制value来设置当前的值,通过用来控制视频、音频等播放进度。
     4、UISegmentedControl为分段控件,相当于一组按钮,不同的Item可以设置不同的点击事件。
     5、UIPageControl的currentPage属性的使用。
     注意:添加的点击事件通过UIControlEventValueChanged来触发事件。

iOS学习之UIControl的更多相关文章

  1. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  2. iOS学习系列 - 扩展机制category与associative

    iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...

  3. iOS学习-压缩图片(改变图片的宽高)

    压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...

  4. 【原】iOS学习之事件处理的原理

    在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...

  5. iOS学习笔记——AutoLayout的约束

    iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...

  6. 【原】iOS学习47之第三方-FMDB

    将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...

  7. iOS学习路线图

    一.iOS学习路线图   二.iOS学习路线图--视频篇       阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天       学习后目标:    ...

  8. 黑苹果-IOS学习的开始

    深知安装黑苹果的不易,在这里写一下关于我的Thinkpad E430c安装黑苹果教程(Mac版本:Yosemite 10.10.4),希望能够帮助有需要的朋友. 首先贴上我的电脑配置报表: ----- ...

  9. iOS 学习资源

    这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的 iOS 学习路线, 更快的入门, 更准确的定位的 ...

随机推荐

  1. python和php对比

    对php比较熟悉,最近开始学些python,总是搞混,特记录下来,用于熟悉python:1.python数组和php不同,php相对简单统一,即array(包括普通数组和关联数组两部分),python ...

  2. VS/Visual studio 源代码编辑器里的空处出现点号解决办法

    此原因是不小心按错了键盘上的组合键Ctr+E+S, 再次按Ctr+E+S可消除.

  3. CSS长度单位

    罗列了CSS中常用的长度单位及比较 单位 含义 em 相对于父元素的字体大小 ex 相对于小写字母"x"的高度 rem 相对于根元素字体大小 px 相对于屏幕分辨率而不是视窗大小: ...

  4. Leetcode 0025. Reverse Nodes in k-Group

    居然把头插法写错了,debug了一个多小时 /** * Definition for singly-linked list. * struct ListNode { * int val; * List ...

  5. .Net字符串驻留池

    在.Net中,对于相同的字符串,.Net会将它们指向同一个地址,它们是相同的实例..Net中的字符串并不会更新,当更改一个字符串变量时,由于字符串的不可变性,.Net实际上是新创建一个字符串,而将变量 ...

  6. HLS入门收集(1)

    使用HLS各种问题 关于求指数函数 exp(x) 在HLS中使用exp(x),也就是指数函数.不能导出RTL到EDK也就是Pcore  只能导出为VIVADO IP:相关解释:见官方论坛 http:/ ...

  7. NSDateFormatter中时间格式串的含义

    a: AM/PM (上午/下午) A: 0~86399999 (一天的第A微秒) c/cc: 1~7 (一周的第一天, 周天为1) ccc: Sun/Mon/Tue/Wed/Thu/Fri/Sat ( ...

  8. 根据Ip获取城市帮助类

    思路构建 1.先通过本地的测IP地址库进行匹配 2.如果本地IP地址库存在此IP的城市信息,就直接返回,调用速度也快 3.如果本地没有对应的IP城市信息,必须通过调用网络的IP查询的API了,这里我使 ...

  9. [Java]_函数传参的疑惑与思考

    问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs. void dfs(TreeNode node , int sum , ArrayList& ...

  10. yii在TbGridView的td里面加入相应的下拉选项(转)

    当你需要在一个GridView渲染某一个复杂元素的时候(特别是在这种情况下,这是一个小部件),这就需要你在控制器中调用一个动作.例如你给一个GridView的定义这样的一列: <?php $th ...