swift __1 试写第一个swift程序

参照:http://swiftist.org/topics/96?page=2#comments

发现有几个地方一直报错,自己修改了下,有可能是xcode6更新导致

代码写的比较乱,这是我的硬伤,这次注释还是后面加上的,这也是我的硬伤,需要改。养成良好的代码习惯。

 

下面贴上自己的代码

//
//  ViewController.swift
//  SwiftCounter
//
//  Created by 三十一 on 14-8-20.
//  Copyright (c) 2014年 yetuoxun. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    var timeLable:UILabel?//显示剩余时间
    var timeButtons:[UIButton]? //设置时间的按钮数组
    var startStopButton:UIButton? //启动 停止按钮
    var clearButton :UIButton?  // 复位按钮
    let timeButtonInfos = [("1分",5),("3分",180),("5分",300),("",1),]// 数组 记录选项
    var remainingSeconds: Int = 0{
        //通过willSet 方法实时监控remainingSeconds 变化 改变UI (个人理解  willSet 需要去求证)
        willSet(newSeconds){
            let mins = newSeconds/60
            let seconds = newSeconds%60
            self.timeLable!.text = NSString(format: "%02d:%02d", mins,seconds)
        }
    }
    
    var isCounting :Bool = false{
        //通过willSet 方法实时监控isCounting 变化 改变UI (个人理解  willSet 需要去求证)
        willSet(newValue){
            if newValue{
                //启动timer
                timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTimer:", userInfo: nil, repeats: true)
            }else{
                //销毁timer
                timer?.invalidate()
                timer = nil
            }
            //改变按钮可点击状态
             setSettingButtonsEnabled(!newValue)
        }
        
    }
    
    //改变按钮可点击状态
    func setSettingButtonsEnabled(enabled: Bool) {
        for button in self.timeButtons! {
            button.enabled = enabled
            button.alpha = enabled ? 1.0 : 0.3
        }
        clearButton!.enabled = enabled
        clearButton!.alpha = enabled ? 1.0 : 0.3
    }
    
    //声明timer
    var timer:NSTimer?
    
    //override 关键字什么意思需要求证
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.grayColor()
        //初始化 数据及UI
        setupTimeLable()
        setuptimeButtons()
        setupActionButtons()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

// 初始化显示时间lable
    func setupTimeLable(){
        timeLable = UILabel();
        timeLable!.textColor = UIColor.whiteColor()
        timeLable!.font = UIFont(name: "", size: 80)
        timeLable!.backgroundColor = UIColor.blackColor()
        timeLable!.textAlignment = NSTextAlignment.Center
        self.view.addSubview(timeLable!)
        
    }
    

    //初始化 选择时间按钮
    func setuptimeButtons(){
        var buttons:[UIButton] = []
        for (index,(title, _)) in enumerate(timeButtonInfos){
            // 上行中 index title 均为 变量 title类似与 for(id temp in arr) 中的 temp   
            //初始化button 类似与 alloc] init
            let button : UIButton = UIButton()
            button.tag = index;
            //设置标题
            button.setTitle("\(title)", forState: UIControlState.Normal)
            //设置背景
            button.backgroundColor = UIColor.orangeColor()
            //设置title各个状态下的颜色
            button.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
            button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Highlighted)
            
            //按钮绑定时间 触发方法
            button.addTarget(self, action: "timeButtonTapped:", forControlEvents: UIControlEvents.TouchUpInside)
            //将button 加入buttons数组中 个人理解 需要求证
            buttons.append(button)
//            buttons.insert(button, atIndex: index)
            //button 加入当前View
            self.view.addSubview(button)
        }
        //数组传递 赋值
        timeButtons = buttons
    }
    
    
    func setupActionButtons(){
        startStopButton = UIButton()
        startStopButton!.backgroundColor = UIColor.redColor()
        startStopButton!.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        startStopButton!.setTitleColor(UIColor.blackColor(), forState: UIControlState.Highlighted)
        startStopButton!.setTitle("启动/停止", forState: UIControlState.Normal)
        startStopButton!.addTarget(self, action: "startStopButtonTapped:", forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(startStopButton!)
        
        
        clearButton = UIButton()
        clearButton!.backgroundColor = UIColor.redColor()
        clearButton!.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        clearButton!.setTitleColor(UIColor.blackColor(), forState: UIControlState.Highlighted)
        clearButton!.setTitle("复位", forState: UIControlState.Normal)
        clearButton!.addTarget(self, action: "clearButtonTapped:", forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(clearButton!)
    }
    
    
    func startStopButtonTapped(sender:UIButton){
        isCounting = !isCounting
        if isCounting {
            createAndFireLocalNotificationAfterSeconds(remainingSeconds)
        } else {
            println("111111111111111")
            //敲这段代码时间 发现通知闪一下不见了  怀疑是在后台 程序仍可运行这段代码 输出显示我的判断是对的~~
            //但是如果移除这行代码  通知何时移除????
            //结论 定时器 在app 进入后台时仍可运行  这是与之前的区别,之前程序进入后台时  app 会刮起 现在貌似不会了  需求证
            //另外 本地通知 只要app 位于后台才会显示 这与之前是一样的
            UIApplication.sharedApplication().cancelAllLocalNotifications()
        }

    }
    
    
    func clearButtonTapped(sender : UIButton){
        remainingSeconds = 0
    }
    
    
    func timeButtonTapped(sender: UIButton){
        let (_,seconds) = timeButtonInfos[sender.tag]
        remainingSeconds += seconds
    }
    
    
    func updateTimer(timer11: NSTimer) {
        remainingSeconds -= 1
        if remainingSeconds <= 0 {
            let alert = UIAlertView()
            alert.title = "计时完成!"
            alert.message = ""
            alert.addButtonWithTitle("OK")
            alert.show()
            timer?.invalidate()
            timer = nil
            setSettingButtonsEnabled(true)
            startStopButtonTapped(startStopButton!);
        }
    }
    
    override func  viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        timeLable!.frame = CGRectMake(10, 40, self.view.bounds.size.width - 20, 120)
        
        let gap = ( self.view.bounds.size.width - 10*2 - (CGFloat(timeButtons!.count) * 64) ) / CGFloat(timeButtons!.count - 1)
        for (index, button) in enumerate(timeButtons!) {
            let buttonLeft = 10 + (64 + gap) * CGFloat(index)
            button.frame = CGRectMake(buttonLeft, self.view.bounds.size.height-120, 64, 44)
        }
        
        startStopButton!.frame = CGRectMake(10, self.view.bounds.size.height-60, self.view.bounds.size.width-20-100, 44)
        clearButton!.frame = CGRectMake(10+self.view.bounds.size.width-20-100+20, self.view.bounds.size.height-60, 80, 44)

    }
    func createAndFireLocalNotificationAfterSeconds(seconds: Int) {
        
        UIApplication.sharedApplication().cancelAllLocalNotifications()
        let notification = UILocalNotification()
        
//        let timeIntervalSinceNow = seconds.bridgeToObjectiveC().doubleValue
//        let ssy = seconds
//        notification.fireDate = NSDate(timeIntervalSinceNow:ssy);
        let ssy:NSTimeInterval = NSTimeInterval(seconds)
        notification.fireDate = NSDate(timeIntervalSinceNow: ssy)
        
        notification.timeZone = NSTimeZone.systemTimeZone();
        notification.alertBody = "计时完成!";
        
        UIApplication.sharedApplication().scheduleLocalNotification(notification);
        
    }
    
}

 

posted on 2014-08-20 17:09  三十一  阅读(437)  评论(0编辑  收藏  举报

导航