UIRefreshControl - リフレッシュコントロール (テーブルのグルグル)

f:id:oynop:20150227002349p:plain:h300

説明

UIRefreshControlはUIControlのサブクラス
テーブルを下に引っ張った時に出るグルグル.
UITableViewに適用するように設計されているため,UIScrollViewなどに用いるとおかしな動作になる可能性がある.
MYTableViewについては

ソースコード

UIRefreshControlSample.swift

import UIKit
class UIRefreshControlSample: UIView {
    var rc: UIRefreshControl!
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = colorPattern.back()
        
        // リフレッシュコントロールを設置するテーブル
        // テーブルのみに適用することが推奨されている
        let tv = MYTableView(frame: CGRectMake(20, 40, self.frame.width - 40, self.frame.height - 80))
        self.addSubview(tv)

        // デザイン
        tv.layer.masksToBounds = true
        tv.layer.cornerRadius = 10.0
        
        // 要素追加
        for i in 0..<30 {
            tv.append("ITEM \(i)", detail: "detail\(i)")
        }
        
        rc = UIRefreshControl()        
        // アイコンの下の文字
        rc.attributedTitle = NSAttributedString(string: "Refresh Control")

        // 更新が始まった時の処理の指定
        rc.addTarget(self, action: "refreshControlChanged:", forControlEvents: UIControlEvents.ValueChanged)
        
        tv.addSubview(rc)
    }
    func refreshControlChanged(rc: UIRefreshControl) {
        println("refreshing")
        
        // 更新処理を書く
        var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "refreshed", userInfo: nil, repeats: false)                
    }
    func refreshed() {
        println("refreshed")
        
        // リフレッシュコントロールを消す
        rc.endRefreshing()
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

ViewController.swift

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {       
        super.viewDidLoad()
        self.view.backgroundColor = colorPattern.back()
        self.view.addSubview(UIRefreshControlSample(frame: self.view.frame))
    }
   
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}