【swift】playgroundでユーザーインタラクション
概要
Xcode7.3から、playgroundでユーザーインタラクションがつかるようになりました。
Xcode Release Notes, Xcode7.3のPlaygroundはついにインタラクションに対応! - QiitaUISliderをつかって新しい機能を試してみました。
UISliderをplaygroundで使ってみる
playgroundでのUISlider(7.3まで)
playgroundでUISliderのインスタンスを作成すると Quick LookでUISliderを表示できますが、スライダーのボタンを動かすことはできませんでした。
let label: UILabel = UILabel();
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) } }
セレクタの指定方法
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)