一、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. Android ROM 备书

    1. Android ROM 目录接口 我们经常说的刷ROM是刷系统的意思,但是ROM的原意并不是这样,ROM的全称是read only memory只读储存器,正因为它是“只读”的,而且系统文件通常 ...

  2. JS里的onclick事件

    可以通过以下代码了解JS里的onclick事件: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml&quo ...

  3. Apache Segmentaion Fault故障处理案例分析

    本文出自 "李晨光原创技术博客" 博客,转载请与作者联系!

  4. C++三种内存分配方式

    从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出.只 ...

  5. pycurl

    http://www.cnblogs.com/lonelycatcher/archive/2012/02/09/2344005.html http://ju.outofmemory.cn/entry/ ...

  6. poj1005 I Think I Need a Houseboat

    这题目只要读懂了意思就好做了,先求出来(0.0)到(x.y)的距离为r,然后求出来以r为半径的半圆的面积,然后再用这个面积除以50,再向上取整就可以啦. #include <stdio.h> ...

  7. Android自定义样式

    1.AndroidManifest.xml android:theme="@style/Theme.CustomDialog 样式要用:@style <?xml version=&qu ...

  8. Android代码写View

    1.Java Code package com.fish.helloworld; import android.app.Activity; import android.content.Context ...

  9. systemctl

      旧指令 新指令 使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service 使某服务不自动启动 chkconfig - ...

  10. mac ping ip地址

    Mac下有个类似于Windows下CMD的模式叫做终端,但是这个模式和Windows下的CMD有着很大的差别. 工具/原料 Mac电脑一台 方法/步骤   首先通过菜单栏的搜索功能找到“终端”,也可以 ...