以下のSwift 2コードをセットアップして、アプリ全体ですべてのタッチをキャプチャします。タッチが発生したときやタッチが止まったときに警告を発する。UIApplicationでタッチをキャプチャし、ViewControllerでエラーを引き起こす関数を呼び出す
私はタッチが発生しているときmyVC
という名前の別のビューコントローラに二つの機能にアクセスしたいと、彼らが停止したら、機能1 funcOne()
を呼び出し、2 funcTwo()
が機能しています。しかし、私は継続的にエラーfatal error: unexpectedly found nil while unwrapping an Optional value
を受け取ります。 myVC
が呼び出されるたびにエラーが発生するようです。
ViewControllerでエラーなしで関数を呼び出すことはできますが、アプリがSwift 2でタッチイベントを受信しているか受信していないかによって、どうすればよいですか?
main.swift
ファイル:
import UIKit
UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate))
UIApplication.swift
ファイル:
import UIKit
@objc(MyApplication)
class MyApplication: UIApplication {
var myVC: ViewController!
override func sendEvent(event: UIEvent) {
if event.type != .Touches {
super.sendEvent(event)
return
}
var touchesStarted = false
if let touches = event.allTouches() {
for touch in touches.enumerate() {
if touch.element.phase != .Cancelled && touch.element.phase != .Ended {
touchesStarted = true
break
}
}
}
if touchesStarted {
myVC.funcOne() // Call function one on ViewController
} else {
myVC.funcTwo() // Call function two on ViewController
}
super.sendEvent(event)
}
}
を言う必要があることになり、何をやっていることは本当に悪いアイデアであり、それは全く不要です。 UIApplicationの代わりにUIWindowをサブクラス化することで、より安全にタッチ操作に介入することができます。また、すべての目の前に目に見えないビューを使用してView Controllerのレベルに介入することもできます。 – matt
ありがとう、@マット。 myVCの変数を値に設定するにはどうすればよいですか? – user4806509
私は 'UIWindow'を試しましたが、すべてのジェスチャーとタッチの組み合わせでは機能しません。 'UIApplication'は' print'を使ってテストします。しかし、私はViewControllerに行く関数を設定する必要があります。 – user4806509