UI第一周学习总结

ios开发之UI学习第一周总结

UIView基本属性、方法、视图关系、动画

基本属性和方法

UIView:是iOS中所有视图(控件)直接/间接的父类;所以UIView的属性和方法,对于其他类型的视图都有效

视图:在屏幕上能看见的所有的东西都属于视图

1.首先要创建UIview的对象

let redView = UIView.init()

如果想要将视图展示在屏幕上的两个必要条件:
(a).必须设置坐标和大小(默认坐标是(0,0),默认大小(0,0))
(b).将视图添加到已经展示子屏幕上的视图上
2.设置frame属性(由坐标(下,y)和大小(width,height)两部分组成)

redView.frame = CGRect(x: 10, y: 10, width: 100, height: 100)

注意iOS中所有的结构体都有一个对应的Make方法用来快速的创建一个结构体变量

redView.frame = CGRectMake(10, 10, 100, 100)

3.将视图添加到界面

self.view.addSubview(redView)

4.设置背景颜色

redView.backgroundColor = UIColor.redColor()

创建背景颜色的方法有很多种,特别推荐三原色创建法,通过三原色来创建任意你想要的颜色,前提是你要知道红绿蓝的值,这个可以通过(数码测色计)来查看
下面就是我们创建的视图

![屏幕快照 2016-08-27 上午10.43.20.png](/Users/macbook/Desktop/屏幕快照 2016-08-27 上午10.43.20.png)

下面我们来聊聊视图的形变(transform)

当前视图发生形变,那么添加到当前视图上的所有的视图会跟着一起形变
a.缩放
//参数1:x方向上的缩放比例
//参数2: y方向上的缩放比例

redView.transform = CGAffineTransformMakeScale(0.8, 2.5)

b.旋转
//参数:旋转角度(圆周率对应的角度值)

redView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4 / 2))

c.平移
//参数1:在x方向上平移的距离,负值->向左移,正值->向右移
//参数2:在y方向上平移的距离,负值->向上移,正值->向下移

 redView.transform = CGAffineTransformMakeTranslation(0, 300)

d.多个形变同时发生(在另外一个形变的前提下形变)
以下是在平移的前提下旋转
//参数1:另外一个形变
//参数2:旋转角度

redView.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(0.5, 0.5), CGFloat(M_PI_4 / 2))

以下我们来探讨父子视图关系

1.一个视图只有一个父视图,可以有多个子视图
2.连续将同一个视图添加到两个视图上,最后一次添加有效
我们将一个视图添加到界面的时候会就会完美地呈现父子视图

self.view.addSubview(redView)

selft.view就是redView的父视图; redView就是self.view的子视图

4.设置tag值,默认是0;设tag值的时候,值必须大于0;tag的作用:用来区分界面上不同的视图

yellowView.tag = 101

如果我们想要通过tag值拿到指定的子视图并且可以对它的尺寸进行修改

let subView2 = self.view.viewWithTag(101)
subView2?.frame.origin.y = 100

下面我们来接触UIView动画

UIView动画就是视图出现在界面上的出现方式,有从某个方向直接弹出来的,有的不停的在放大和缩小有的是慢慢的滑出来
视图我们就不创建了;直接写动画方法,到时候直接调用就行
方法1.(在移动的过程中将视图缩小并且改变视图的颜色)

 func UIViewAnimation1() {
        
        //功能:执行这个方法前视图的状态,动画的切换到闭包里面设置的最终状态
        //参数1:动画时间(单位:秒)
        //参数2:闭包,设置动画结束时视图的状态
        UIView.animateWithDuration(2) {
            
            //在这儿来设置视图动画结束时的状态
            //a.动画的改变视图的坐标
            self.subView.frame.origin.y = 50
            
            //b.动画的改变视图的大小
            //self.subView.frame.size = CGSizeMake(50, 50)
            self.subView.transform = CGAffineTransformMakeScale(0.5, 0.5)
            
            //c.动画的改变视图的背景颜色
            self.subView.backgroundColor = UIColor.redColor()
            
            //d.动画的改变视图的透明度(0~1)
            self.subView.alpha = 0.3
            
            
        }
        
        
    }

方法2.(在固定的范围内循环移动)

func UIViewAnimation3() {
        
        //参数1:动画时间
        //参数2:延迟时间
        //参数3:选项,Repeat->动画重复执行,Autoreverse->自动回到动画开始的状态
        //参数4:设置动画结束时视图状态的闭包
        //参数5:整个动画过程完成后需要执行的闭包
        UIView.animateWithDuration(2, delay: 1, options: [ .Repeat, .Autoreverse], animations: {
            
                self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
            
            }, completion: nil)
    }
    

方法3:(在原地像弹簧一样缩放)

func UIViewAnimation4() {
        
        //参数1:动画时间
        //参数2:延迟时间
        //参数3:弹簧的压力系数
        //参数4:弹簧初始的加速度
        //参数5:选项
        //参数6:设置动画结束时视图的状态
        //参数7:动画结束后要执行的闭包
        UIView.animateWithDuration(2, delay: 1, usingSpringWithDamping: 0.1, initialSpringVelocity: 0, options: [ .Repeat, .Autoreverse], animations: {
            
            //注意:对于有圆角的视图,改变大小而又不影响形状,只能通过形变去缩放。不能直接改变frame中的size
                self.subView.transform = CGAffineTransformMakeScale(0.5, 0.5)
            
            }, completion: nil)
    }
    

UILabel基础

从UIView继承下来的属性

1.创建UILabel对象

let label = UILabel.init(frame: CGRectMake(100, 100, 200, 300))

2.添加到界面上

 self.view.addSubview(label)

3.设置背景颜色

 label.backgroundColor = UIColor.yellowColor()

1.设置字体(字体大小默认是17)

label.font = UIFont.systemFontOfSize(24)

2.使用系统字体,设置字体大小和粗细
//参数1:字体大小
//参数2;字体粗细(0~1)

label.font = UIFont.systemFontOfSize(17, weight: 0.2)

3.使用斜体,设置字体大小

label.font = UIFont.italicSystemFontOfSize(17)

4.设置字体颜色

label.textColor = UIColor.redColor()

5.设置阴影颜色

label.shadowColor = UIColor.blackColor()

6.置阴影的偏移效果

label.shadowOffset = CGSizeMake(-1, -1)

7.设置字体的对齐模式(默认是左对齐)

label.textAlignment = .Center

8.设置换行模式
//ByWordrapping -> 以单词为单位换行
//ByCharWrapping ->以字符为单位换行

label.lineBreakMode = .ByCharWrapping

UIImageView基础

从UIView继承下来的属性和方法

1.创建UIImageView对象

let imageView = UIImageView.init(frame: CGRectMake(0, 100, 300, 300))

2.添加到界面上

self.view.addSubview(imageView)

3.设置背景颜色

imageView.backgroundColor = UIColor.yellowColor()

UIImageView专有的属性

1.image属性
a.通过图片名去创建一个图片对象(注意:如果图片的格式是png,那么图片名的后缀可以省略。但是其他格式的图片的图片名的后缀不能省略)

imageView.image = UIImage.init(named: "back2.jpg")

b.通过图片路径去创建一个图片对象
将文件(除了swift文件)放到工程中,实质是放到了当前应用程序的包文件中;
想要拿到工程中的图片路径先要获取包文件;); 就要拿到包中的指定的文件的路径

let imagePath = NSBundle.mainBundle().pathForResource("back2", ofType: "jpg")
imageView.image = UIImage.init(contentsOfFile: imagePath!)

c.c.比较通过图片名和通过图片地址创建图片对象的两种方法:
(1).通过图片名创建的图片对象在程序结束后才会被销毁,只会创建一次;通过图片地址创建图片对象是当前图片对象不再使用的时候就销毁
(2)使用图片名创建图片的情况:创建小图标的时候;在工程中会重复使用的图片
(3)使用图片地址创建图片对象的情况:不会频繁的在多个界面出现的大图
3.内容模式

imageView.contentMode = .ScaleToFill

UIImageView帧动画

效果描述:使用几张帧动画图片做到让小鸟从模拟器上从左侧飞向右侧
1.创建一个定时器,并且自动开启
参数1:定时时间
参数2:调用方法的对象
参数3:存储定时时间到了以后需要调用的方法(可以不带参也可以带参,但是如果带参只能带一个参,并且参数类型是NSTimer类型)
参数4:给当前的NSTimer的userInfo属性赋的值(一般写nil)
参数5:是否重复
功能:每隔0.1秒,self去调用一次timerAction方法

NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "timerAction:", userInfo: "aaa", repeats: true)

2.定时器方法
//参数:当前定时器

func timerAction(timer:NSTimer) {
        
        print(timer.userInfo)
        
        self.imageView.frame.origin.x += 3
        
        //判断小鸟是否飞到了屏幕边缘
        if self.imageView.frame.origin.x >= self.view.bounds.width - self.imageView.bounds.width {
            return
            //暂停定时器
            timer.fireDate = NSDate.distantFuture()
            //让定时器继续
            timer.fireDate = NSDate.distantPast()
            
        }
        
        
    }

3.创建imageview

func creatImageView()  {
       
        //1.创建一个UIImageView对象
        //通过图片去创建一个imageView;UIImageView的大小是图片的大小,坐标是(0,0)
        imageView = UIImageView.init(frame: CGRectMake(100, 100, 50, 50))
        imageView = UIImageView.init(image: UIImage.init(named: "DOVE 1.png"))
        //2.显示在界面上
        self.view.addSubview(imageView)
        
        //3.使用UIImageView播放帧动画
        //a.设置帧动画数组
        //创建一个空的图片数组
        var imageArray = [UIImage]()
        //通过for循环创建18张图片
        for item in 1...18 {
            //拼接图片名
            let imageName = "DOVE \(item).png"
            //创建对应的图片
            let image = UIImage.init(named: imageName)
            //将图片存到数组中
            imageArray.append(image!)
        }
        
        imageView.animationImages = imageArray
        
        //b.设置动画时间,单位秒
        imageView.animationDuration = 1
        
        //c.设置动画的重复次数(默认是0->无限循环)
        imageView.animationRepeatCount = 0
        
        //d.开始动画
        imageView.startAnimating()
        
    }

    

UIButton基础以及自制UIButton

Button有很多种,有图片按钮、文字按钮、图片文字按钮
1.图片按钮

func imageButton() {
        
        //1.创建一个按钮对象
        let imageBtn = UIButton.init(frame: CGRectMake(100, 200, 80, 80))
        //2.添加到界面上
        self.view.addSubview(imageBtn)
        
        //3.设置图片
        //参数1:图片
        //参数2:状态(正常、高亮、选中、不可用)
        imageBtn.setImage(UIImage.init(named: "luffy1"), forState: .Normal)
        
        //4.添加按钮点击事件
        imageBtn.addTarget(self, action: "btnAction:", forControlEvents: .TouchUpInside)
        
        
    }
    

上边的btnAction是调用的下边的方法,文字按钮和图片文字按钮一样是调用了这个方法

//MARK: - 按钮点击
    func btnAction(btn:UIButton) {
        
        //CGFloat(arc4random()%256)/255
        //设置按钮的背景颜色是随机色
        btn.backgroundColor = UIColor.init(red: CGFloat(arc4random()%256)/255, green: CGFloat(arc4random()%256)/255, blue: CGFloat(arc4random()%256)/255, alpha: 1)
    }

2.下边是文字按钮,详细解释写在代码里

//MARK: - 文字按钮
    func titleButton() {
        //UIButton:UIControl:UIView
        //UIButton上有一个titleLabel专门负责按钮上文字的显示;有一个imageView专门负责按钮上图片的显示
        //=========UIView的属性和方法========
        //1.创建UIButton对象
       let titleBtn = UIButton.init(frame: CGRectMake(100, 100, 100, 50))
       //2.添加到界面上
        self.view.addSubview(titleBtn)
        //3.设置背景颜色
        titleBtn.backgroundColor = UIColor.redColor()
        
        //=========UIButton专有的属性和方法======
        //1.设置按钮上显示的文字(给不同的状态设置不一样的文字)
        //参数1:想要在按钮上显示的文字
        //参数2:状态
        //Normal -> 正常状态(按钮正常显示,没有被点击或者按下的时候)
        //Highlighted ->高亮(按钮被按下,没有弹起来的时候的状态)
        //Selected -> 选中状态
        //Disabled -> 不可用状态(按钮不能被点击)
        titleBtn.setTitle("正常", forState: .Normal)
        titleBtn.setTitle("高亮", forState: .Highlighted)
        titleBtn.setTitle("选中", forState: .Selected)
        titleBtn.setTitle("不可用", forState: .Disabled)
        
        //2.设置当前按钮是否选中(默认是false->非选中)
        titleBtn.selected = false
        
        //3.设置当前按钮是否可用(默认是true->可用)
        titleBtn.enabled = true
        
        //4.设置文字颜色(给不同的状态设置不一样的颜色)
        titleBtn.setTitleColor(UIColor.yellowColor(), forState: .Normal)
        titleBtn.setTitleColor(UIColor.lightGrayColor(), forState: .Disabled)
        
        //注意:按钮上的文字和文字颜色,必须通过对应的set方法去根据状态去设置。其他和文字相关的属性可以通过拿到titleLabel去设置
        //5.设置按钮上的文字字体
        titleBtn.titleLabel?.font = UIFont.systemFontOfSize(12)
        //6.设置按钮上的文字的对齐方式
        titleBtn.titleLabel?.textAlignment = .Right
        
        //!!!7.给按钮添加事件
        //参数1:调用方法的对象
        //参数2:指定事件发生后参数1要去调用的方法(这个方法可以不带参,如果带参只能带一个,并且参数的类型是UIButton类型),实参就是当前添加事件的按钮本身
        //参数3:事件
        //TouchDown -> 按下事件
        //功能:当按钮被按下的时候,self会去调用btnAction方法
        //TouchUpInside ->按下弹起事件
        //功能:当按钮被按下弹起来的时候,self会去调用btnAction方法
        titleBtn.addTarget(self, action: "btnAction:", forControlEvents: .TouchUpInside)
        
    }
    

3.最后讲讲图片文字按钮

 //MARK: - 图片文字按钮
    func imageTitleBtn() {
        
        //a.同时设置title和image属性,显示是图片在左,文字在右
        //b.同时设置title和groundImage,显示是图片在下层,文字在上层
        //1.创建一个按钮对象
        let btn1 = UIButton.init(frame: CGRectMake(100, 300, 100, 50))
        self.view.addSubview(btn1)
        
        //2.设置title
        btn1.setTitle("标题", forState: .Normal)
        btn1.setTitleColor(UIColor.whiteColor(), forState: .Normal)
        //3.设置图片
        //btn1.setImage(UIImage.init(named: "luffy1"), forState: .Normal)
        btn1.setBackgroundImage(UIImage.init(named: "luffy2"), forState: .Normal)
        
        //4.添加事件
        btn1.addTarget(self, action: "btnAction:", forControlEvents: .TouchUpInside)
    }
    

UITextField基础

textfield就是手机界面上要你输入文字或者登录帐号时出现的那个条形框
快捷键:command键 + k 弹出或者收起模拟器上的键盘

UITextField的属性和方法

1.创建UITextField对象

let textField = UITextField.init(frame: CGRectMake(100, 100, 200, 50))

2.添加到界面上

self.view.addSubview(textField)

3.设置背景颜色

textField.backgroundColor = UIColor.yellowColor()

![屏幕快照 2016-08-27 下午2.51.21.png](/Users/macbook/Desktop/屏幕快照 2016-08-27 下午2.51.21.png)

控件大集合

1.开关

import UIKit
//生命周期和属性
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.creatSwitch()
    
    
    
    }


}
//创建控件
extension ViewController{
    //1.开关
    func creatSwitch(){
        //1.创建开关对象
        let sw = UISwitch.init(frame: CGRectMake(100, 100, 100, 50))
        //2.添加到界面上
        self.view.addSubview(sw)
        //3.核心属性:开关状态(默认是false)
        //设置开关的状态
        sw.on = true
        sw.setOn(false, animated: true)//变成状态的时候有动画效果
        //拿到当前的状态
        print(sw.on)
       //4.核心方法
        //参数1:调用方法的对象;参数2:指定的事件发生后参数1要去调用的方法对应的selector;参数3:事件
        // 功能:当开关的值(开关的状态)发生改变的时候,self回去调用switchaction方法
        sw.addTarget(self, action: #selector(ViewController.switchAction(_:)), forControlEvents: .ValueChanged)
        //5.设置开关开的状态的颜色
        sw.onTintColor = UIColor.redColor()
        //6.关的时候边框的颜色
        sw.tintColor = UIColor.purpleColor()
        //7.开关滑块的颜色
        sw.thumbTintColor = UIColor.yellowColor()
        //sw.onImage = UIImage.init(named: <#T##String#>)
    }
    
    
}
//事件响应
extension ViewController{
    //1.开关事件
    func switchAction(sw:UISwitch){
        
        if sw.on{
            print("开关打开")
        }
        else{
            print("开关关闭")
        }
    }
    
}

开关可以左右滑动
![屏幕快照 2016-08-27 下午2.55.12.png](/Users/macbook/Desktop/屏幕快照 2016-08-27 下午2.55.12.png)

2.滑块

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.creatSlider()
    }
    
}
extension ViewController{
   
    func creatSlider(){
        //1.创建对象
        let slider = UISlider.init(frame: CGRectMake(100, 100, 200, 50))
        //2.添加到界面上
        self.view.addSubview(slider)
        //3.核心属性:值(滑块位置对应的值)
        //value:滑块位置对应的值(默认是0---1)
        //设置滑块的最大最小值
        slider.minimumValue = 0
        slider.maximumValue = 100
        //滑块刚开始的时候的位置
        slider.value = 50
        //4.核心方法
        slider.addTarget(self, action: #selector(ViewController.sliderAction(_:)), forControlEvents: .ValueChanged)
        //5.1滑块右边线条的颜色
        slider.maximumTrackTintColor = UIColor.blackColor()
        //5.2滑块左边线条的颜色
        slider.minimumTrackTintColor = UIColor.redColor()
        //5.3滑块滑块的颜色
        slider.thumbTintColor = UIColor.greenColor()
        //6.是否连续改变
        slider.continuous = false
//        //7.点击牛眼睛后滑条滑块的图片
//        slider.setThumbImage(UIImage.init(named: "back2.jpg"), forState: .Normal)
//        
        
        
    }
    
    
}
extension ViewController{
    func sliderAction(slider:UISlider){
        print(slider.value)
        
    }
    
}

![屏幕快照 2016-08-27 下午2.59.19.png](/Users/macbook/Desktop/屏幕快照 2016-08-27 下午2.59.19.png)

3.与滑块相似但是不同的进度条

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.creatProgress()
        
    }
    


}
extension ViewController{
    func creatProgress(){
        //1.创建进度条对象
        let progress = UIProgressView.init(frame: CGRectMake(100, 300, 300, 20))
        progress.tag = 100
        //2.添加到界面
        self.view.addSubview(progress)
        //3.核心属性
        //进度(0--1)
        //设置当前进度
        progress.progress = 0.5
        progress.setProgress(0.6, animated: true)
        //颜色相关
        progress.progressTintColor = UIColor.blackColor()
        progress.trackTintColor = UIColor.greenColor()
        //图片相关
        
    }
    

}

![屏幕快照 2016-08-27 下午3.03.03.png](/Users/macbook/Desktop/屏幕快照 2016-08-27 下午3.03.03.png)

4.下面是个自定义的一个分段选择器,基本上所有手机上都有的


import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
//        //系统的分段选择器
//        let segement = UISegmentedControl.init(items: ["1","2","3"])
//        segement.frame = CGRectMake(7, 100,400, 50)
//        self.view.addSubview(segement)
//        segement.selectedSegmentIndex = 1
//        segement.addTarget(self, action: #selector(ViewController.action), forControlEvents: .ValueChanged)
//        
//        
        
        //自己的分段选择器
        let selfSegement = YTSegmentControl.init(items: ["海贼","路飞","火影忍者","名侦探柯南"])
        selfSegement.frame = CGRectMake(7, 0,400, 50)
        selfSegement.titleColor = UIColor.redColor()
        selfSegement.titleSelectedColor = UIColor.greenColor()
        selfSegement.selectedSegmentIndex = 1
        selfSegement.addTarget(self, action: #selector(ViewController.selfAction(_:)))
        
        self.view.addSubview(selfSegement)
        
    }
    
    func selfAction(segement:YTSegmentControl) {
        
        print("自己的选择器在做切换")
        print(segement.selectedSegmentIndex)
    }

    
    func action() {
        
        print("系统的选择器在做切换")
    }
    

}

import UIKit



let BtnTag = 100
//MARK:222 - 提供给外部使用的方法
extension YTSegmentControl{
    
    //保存target和action值
    func addTarget(target:AnyObject?, action:Selector) {
        
        self.target = target
        self.action = action
    }
}

class YTSegmentControl: UIView {
    
    ///111.items
    private var items:[String]
    ///5.滑块
    private var slider = UIView()
    
    ///6.保存target
    private var target: AnyObject? = nil
    ///7.保存action
    private var action: Selector? = nil
    
    //MARK: - 构造方法
    init(items:[String]){
        self.items = items
        //CGRectZero ->坐标是(0,0),大小是(0,0)
        super.init(frame: CGRectZero)
        
        //创建items中的每个数组元素对应的按钮
        self.creatSubView()
        
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
//    //MARK: - 属性
    ///1.666当前被选中的按钮的下标
    var selectedSegmentIndex = 0{
        
        
        
    
        //将要将新值赋给selectedSegmentIndex。这个selectedSegmentIndex还是原来
        willSet{
            //1.先将原来选中的按钮变成非选中状态
            let btn1 = self.viewWithTag(BtnTag
             + selectedSegmentIndex) as! UIButton
            btn1.selected = false
            //2.将指定的按钮变成选中状态
            //newValue -> 将要赋给当前属性的那个新的值
            let btn2 = self.viewWithTag(BtnTag + newValue) as! UIButton
            btn2.selected = true
            
        }
        
        
        
        
        
        //777已经给selectedSegmentIndex赋值
        didSet{
        
            UIView.animateWithDuration(0.2) {
                
                self.slider.frame.origin.x = CGFloat(self.selectedSegmentIndex) * self.slider.frame.size.width
            }
        }
        
        
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ///2.888文字选中的颜色
    var titleSelectedColor = UIColor.blueColor(){
    
        didSet{
            
            //更新滑块的背景颜色
            self.slider.backgroundColor = self.titleSelectedColor
            
            for item in self.subviews {
                
                if item.tag >= BtnTag {
                    let btn = item as! UIButton
                    //改变按钮的文字颜色
                    btn.setTitleColor(self.titleSelectedColor, forState: .Selected)
                }
            }
            
        }
    }
    
    ///3.999文字颜色
    var titleColor = UIColor.blackColor(){
    
        //每次从外部给titleColor属性赋值的时候,都需要用最新的titleColor的值去更新按钮的文字颜色
        didSet{
        
            for item in self.subviews {
                
                if item.tag >= BtnTag {
                    let btn = item as! UIButton
                    //改变按钮的文字颜色
                    btn.setTitleColor(self.titleColor, forState: .Normal)
                }
            }
            
        }}
    
    
    
    
    
    
    
    
    

}

















//MARK:555 - 计算子视图的frame
extension YTSegmentControl{
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        //当前分段选择器的宽和高
        let segementW = self.frame.size.width
        let segementH = self.frame.size.height
        
        //1.计算按钮的frame
        let btnW = segementW/CGFloat(self.items.count)
        let btnH = segementH
        let btnY: CGFloat = 0
        
        //遍历所有的子视图
        var i: CGFloat = 0
        for item in self.subviews {
            //找到其中的按钮
            if item.tag >= BtnTag {
                
                let btnX = i * btnW
                item.frame = CGRectMake(btnX, btnY, btnW, btnH)
                //找到一个按钮i加1
                i += 1
            }
            
        }
        
        //2.计算滑块的frame
        let sliderX = CGFloat(self.selectedSegmentIndex) * btnW
        let sliderH: CGFloat = 2
        let sliderY = segementH - sliderH
        let sliderW = btnW
        self.slider.frame = CGRectMake(sliderX, sliderY, sliderW, sliderH)
        
    }
}















//MARK:333 - 创建子视图
extension YTSegmentControl{

    func creatSubView() {
        
        //1.创建按钮
        for (i,item) in self.items.enumerate() {
            //创建按钮不设置frame属性
            let btn = UIButton.init()
            //设置文字
            btn.setTitle(item, forState: .Normal)
            //设置tag值
            btn.tag = BtnTag + i
            
            //设置文字颜色
            btn.setTitleColor(self.titleColor, forState: .Normal)
            btn.setTitleColor(self.titleSelectedColor, forState: .Selected)
            //让默认第0个按钮处于选中状态
            if i == 0 {
                
                btn.selected = true
            }
            
            //添加点击事件
            btn.addTarget(self, action: #selector(YTSegmentControl.btnAction(_:)), forControlEvents: .TouchDown)
            
            
            //添加到界面上
            self.addSubview(btn)
        }
        
        //2.创建滑块
        self.slider.backgroundColor = self.titleSelectedColor
        self.addSubview(self.slider)
        
    }
}








//MARK:444 - 按钮点击事件
extension YTSegmentControl{

    func btnAction(btn:UIButton) {
        
        if self.selectedSegmentIndex != btn.tag - BtnTag {
            //更新选中的下标
            self.selectedSegmentIndex = btn.tag - BtnTag
            
            //通知外部值改变了
            if self.target != nil {
                
                //让target去调用action中的方法
                //参数1:需要调用的方法对应的Selecter
                //参数2:如果Selecter中方法带参,那个这个参数的值就是Selecter中方法的实参
                self.target?.performSelector(self.action!, withObject:self)
            }
            
        }
        
        
        
    }
}



![屏幕快照 2016-08-27 下午3.08.52.png](/Users/macbook/Desktop/屏幕快照 2016-08-27 下午3.08.52.png)

以上就是我本周的总结!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

  • Window : 一、UIView的基本属性和方法 1.创建UIView的对象 说明:想要将视图展示在屏幕上的两个...
    老韩在简书阅读 689评论 0 0
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,001评论 5 13
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,321评论 6 30
  • 有人觉得我强大无比,有人觉得我脆弱如纸;有人觉得我敏锐如刀,有人觉得我迟钝如钟;有人觉得我感情泛滥,有人觉得...
    从妫妤到澜依阅读 345评论 2 4
  • 入夏了,我就盼着雨。一场场的雨,小也好,大也好,都是对这个城市的一次次的洗礼。北京的天空总是灰灰的,甚至可以用苍茫...
    四牧君阅读 272评论 3 2