読者です 読者をやめる 読者になる 読者になる

【swift】playgroundでユーザーインタラクション

概要

Xcode7.3から、playgroundでユーザーインタラクションがつかるようになりました。

Xcode Release Notes, Xcode7.3のPlaygroundはついにインタラクションに対応! - Qiita

UISliderをつかって新しい機能を試してみました。

UISliderをplaygroundで使ってみる

playgroundでのUISlider(7.3まで)

playgroundでUISliderのインスタンスを作成すると Quick LookでUISliderを表示できますが、スライダーのボタンを動かすことはできませんでした。

    let label: UILabel = UILabel();

f:id:unokun3:20160410164801j:plain

playgroundでのUISlider(7.3以降)

playground7.3から、スライダー移動時のイベントを取得することができるようになりました。

以下の例は、イベントを取得時に、値をラベルに出力しています。

import UIKit
import XCPlayground

class ViewController: UIViewController {
    let label: UILabel = UILabel();
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .whiteColor()
        view.frame = CGRectMake(0, 0, 600, 300)
        
        let slider = UISlider()
        slider.frame = CGRectMake(0,0,300,100)
        view.addSubview(slider);
        slider.setValue(0.5, animated: true)
        slider.continuous = false
        slider.addTarget(self, action:
            #selector(ViewController.sliderChanged(_:)), forControlEvents: UIControlEvents.ValueChanged)
        label.frame = CGRectMake(0,50,300,100)
        view.addSubview(label)
        
    }
    
    func sliderChanged(sender: UISlider){
        label.text = String(sender.value)
    }
}

f:id:unokun3:20160410165029j:plain

セレクタの指定方法

playgroundの機能とは関係ありませんが、swift2.2で変更になったセレクタの指定をつかっています。

#selectorは、swift2.2で導入された文法です。今までの文字列でselectorを設定する方法は非奨励になっています。 新しい方法では、文字列での設定でないためメソッド名を間違った場合、コンパイルエラーとして通知されるようになります。

// 今までのセレクタの指定
// 非奨励になりました。
slider.addTarget(self, action: "sliderChanged:", forControlEvents: UIControlEvents.ValueChanged)

// 新しいセレクタの指定
slider.addTarget(self, action:
     #selector(ViewController.sliderChanged(_:)), forControlEvents: UIControlEvents.ValueChanged)

関連情報