醬油04-slider控件

簡單實(shí)現(xiàn)slider控件

import UIKit

class ViewController: UIViewController,sliderDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let slider = Slider(frame: CGRect(x: 100, y: 100, width: 200, height: 100))
        //1.target
//        slider.addTarget(self, action: #selector(didmove(_:)), forControlEvents: .ValueChanged)
        //2.閉包
//        slider.didchange = {
//            sender in
//            print(sender.value)
//        }
        //3.協(xié)議
        slider.delegate = self
        self.view.addSubview(slider)
    }
    func didmove(sender:Slider){
        print(sender.value)
    }
    func sliderdelegate(slider: Slider) {
        print(slider.value)
    }
}

三種方法實(shí)現(xiàn)slider功能

import UIKit
//定義協(xié)議
protocol sliderDelegate {
    func sliderdelegate(slider: Slider)
}

class Slider: UIControl{
    
    //定義成員
    var didchange : ((Slider)->Void)!
    var minvalue : CGFloat = 0
    var maxvalue : CGFloat = 1
    var value : CGFloat = 0.5{
        didSet{
            if value > maxvalue{
                value = 1
            }else if value < minvalue{
                value = 0
            }
            self.setNeedsLayout()
        }
    }
    //創(chuàng)建對(duì)象
    var delegate : sliderDelegate!
    
    var sliderview = UIView()
    //構(gòu)造函數(shù)
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.blueColor()
        sliderview.backgroundColor = UIColor.brownColor()
        self.addSubview(sliderview)
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.backgroundColor = UIColor.blueColor()
        sliderview.backgroundColor = UIColor.brownColor()
        
        self.addSubview(sliderview)
    }
    
    //定義觸摸移動(dòng)函數(shù)
    func Movesliderview(touches: NSSet){
    
        let touch = touches.anyObject() as! UITouch
        
        let location = touch.locationInView(self)
        value = (location.x / self.frame.size.width) * (maxvalue-minvalue) + minvalue
        
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("bagan")
        Movesliderview(touches)
    }
    
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("moved")
      
        Movesliderview(touches)
    }
    
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("end")
        //1.通過閉包實(shí)現(xiàn)
//        if didchange != nil{
//            didchange(self)
//        }
        //2.通過sendActionsForContrloEvents實(shí)現(xiàn)
//        self.sendActionsForControlEvents(.ValueChanged)
        //3.通過協(xié)議實(shí)現(xiàn)
        if delegate != nil{
            delegate.sliderdelegate(self)
        }
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        let width = (value-minvalue)*self.frame.size.width/(maxvalue-minvalue)
        let rect = CGRect(x: 0, y: 0, width: width, height: self.frame.size.height)
        sliderview.frame = rect
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,188評(píng)論 22 665
  • Android UI相關(guān)開源項(xiàng)目庫匯總OpenDigg 抽屜菜單MaterialDrawer ★7337 - 安卓...
    黃海佳閱讀 8,837評(píng)論 3 77
  • 賈雨村的出場(chǎng)帶出了林黛玉了,他是林黛玉的老師,因?yàn)榱主煊耋w弱多病,所以賈雨村便有很多空閑的時(shí)間?!伴e居無聊,每當(dāng)風(fēng)...
    悟澹閱讀 833評(píng)論 1 4
  • 一直在思考一個(gè)問題:為什么有時(shí)候我們明明知道一些事情對(duì)我們有益處,卻沒有真正去做? 比如運(yùn)動(dòng),學(xué)習(xí),陪家人等等 梁...
    阿呆魚頭閱讀 596評(píng)論 0 0

友情鏈接更多精彩內(nèi)容