2016年12月26日 星期一

[IOS] Progress View



@IBOutlet weak var btnStart: UIButton!
    @IBOutlet weak var progress: UIProgressView!
    @IBOutlet weak var labelMsg: UILabel!
    
    //計時器
    var timer: Timer?
    //計數
    var count : Int = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
       
        progress.frame.size.width = 250
        //可以自訂progress顏色
        progress.progressTintColor = UIColor.red
        progress.trackTintColor = UIColor.darkGray
        progress.progress = 0
    }

    @IBAction func donloadClick(_ sender: UIButton) {
    //按鈕失效 避免重複點擊
        btnStart.isEnabled = false
        count = 0
        //參數順序亂掉會報錯
        //The runTimedCode selector means that the timer will call a method named runTimedCode() every 0.5 seconds until the timer is terminated
        timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector:#selector(runTimedCode), userInfo: nil, repeats: true)
    }
    
    func runTimedCode() {
        progress.progress = Float(count) / 100
        labelMsg.text = "process: \(count)%"
        count += 1
        
        if count > 100 {
            timer!.invalidate() // stop
            timer = nil
            btnStart.isEnabled = true
        }
    }

參考資料:hackingwithswift.com

2016年12月15日 星期四

[IOS] ImageView 翻圖片


裡面有用到兩種不同Array寫法來存圖片





class ViewController: UIViewController {
    @IBOutlet weak var btnPre: UIButton!
    @IBOutlet weak var btnNext: UIButton!
    @IBOutlet weak var labelName: UILabel!
    
    @IBOutlet weak var image: UIImageView!
    //兩種array方法
    var arrayImage = ["水上威尼斯","史特拉斯堡-2","科瑪", "新天鵝堡_繽紛","春露"]
    
    var pic: [UIImage] = [
        UIImage(named: "水上威尼斯")!,
        UIImage(named: "史特拉斯堡-2")!,
        UIImage(named: "科瑪")!,
        UIImage(named: "新天鵝堡_繽紛")!,
        UIImage(named: "春露")!
    ]
    var current:Int = 0
    var count:Int = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        count = arrayImage.count
        //image.image = UIImage(named: "水上威尼斯")
        image.image = pic[0]
        labelName.text = arrayImage[0]
        
    }

    @IBAction func preClick(_ sender: UIButton) {
        current -= 1
        if current < 0 {
            current = count - 1
        }
        //image.image = UIImage(named:String(arrayImage[current]))
        image.image = pic[current]
         labelName.text = arrayImage[current]
    }
    @IBAction func nextClick(_ sender: UIButton) {
        current += 1
        if current == count {
            current = 0
        }
        //image.image = UIImage(named:String(arrayImage[current]))
        image.image = pic[current]

        labelName.text = arrayImage[current]

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}










[IOS] 自訂生成按鈕(CustomButton)


範例是在書上看到的,不過程式碼我有改過,因為Swift 3 出來了,而市面書上的範例程式碼... 你懂的

這篇主要是講後端生成程式碼 以Button為例

yourButtonName.addTarget(self, action:#selector(functionName(sender:)), for: .touchUpInside)
fun functionName(sender:UIButton) {
  //....
}

action 這邊 如果沒有回傳值 (sender:) 就不用加了


View 的截圖 自訂12個按鈕


Controller全部程式碼

class ViewController: UIViewController {

    @IBOutlet weak var labelTel: UITextField!
    
    @IBOutlet weak var labelMsg: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        for i in 0...11 {
            let x:Int = 100 + (i % 4) * 60
            let y:Int = 140 + (i / 4) * 60
            let buttonNumber:UIButton = UIButton(type: UIButtonType.system) as UIButton
            //按鈕位置 大小
            buttonNumber.frame = CGRect(x: x,y: y,width: 40, height: 35)
            //文字顏色
            buttonNumber.setTitleColor(UIColor.white, for: UIControlState.normal)
            //按鈕背景
            buttonNumber.backgroundColor = UIColor.black
            //字型大小
            buttonNumber.titleLabel?.font = UIFont(name: "System", size: 22.0)
            if i == 10 {
                buttonNumber.setTitle("X", for: UIControlState.normal)
                 //加入事件 #selector(funcName(sender:)) 函數是有參數的
                buttonNumber.addTarget(self, action:#selector(clearClick(sender:)), for: .touchUpInside)
            } else if i == 11 {
                buttonNumber.setTitle("OK", for: UIControlState.normal)
               
                buttonNumber.addTarget(self, action:#selector(sureClick(sender:)), for: UIControlEvents.touchUpInside)
                
            }else {
                buttonNumber.setTitle("\(i)", for: UIControlState.normal)
                buttonNumber.addTarget(self, action:#selector(numberClick(sender:)), for: UIControlEvents.touchUpInside)
            }
            //加入按鈕
            view.addSubview(buttonNumber)
        }
    }

    func sureClick(sender:UIButton) {
        if labelTel.text?.lengthOfBytes(using: String.Encoding.utf8) == 10 {
            labelMsg.text = "Call " + labelTel.text!
        } else if labelTel.text == "" {
          labelMsg.text = "Please enter your phone number."
        } else if (labelTel.text?.lengthOfBytes(using: String.Encoding.utf8))! > 10{
            labelMsg.text = "Error"
        }
    }
    
    func clearClick(sender:UIButton){
        labelTel.text = ""
        labelMsg.text = ""
    }
    
    func numberClick(sender:UIButton) {
        labelTel.text = labelTel.text! + sender.currentTitle!
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}