我想了解爲什麼我的子視圖沒有收到觸動。UIView子視圖沒有收到觸動
以下是顯示我遇到的行爲的gif:當我單擊右側的青色按鈕時,沒有任何反應(左側視圖的背景應該改變顏色)。當我點擊左側的綠色按鈕時,它正確地接收到觸摸事件,觸發附加的TouchDown動作並且視圖的顏色改變。
這個「應用程序」顯然不是一個真正的應用程序,只是爲了說明我遇到的行爲。真的,我正在學習如何實現在許多應用程序中看到的常見「滑出菜單」模式;通常配有漢堡按鈕。
在許多這些應用程序中,它看起來像主要的應用程序內容被移到一邊來揭示菜單,「隱藏」在應用程序下面,就像它一樣。我試圖在這裏複製同樣的行爲。
我在這裏粘貼我的ViewController代碼。你在下面看到的代碼就是我擁有的一切。
import UIKit
class ViewController: UIViewController {
var originalX : CGFloat!
var originalY : CGFloat!
var containerView = UIView()
var button : UIButton!
var button2 : UIButton!
override func viewDidLoad() {
super.viewDidLoad()
originalX = self.view.frame.origin.x
originalY = self.view.frame.origin.y
button = UIButton(frame: CGRectMake(200, 25, 100, 100))
button.backgroundColor = UIColor.greenColor()
button.addTarget(self, action: "foo", forControlEvents: .TouchDown)
view.addSubview(button)
containerView.frame = CGRectMake(self.view.frame.width, originalY, 150, self.view.frame.height)
containerView.userInteractionEnabled = true
containerView.backgroundColor = UIColor.magentaColor()
containerView.clipsToBounds = false
button2 = UIButton(frame: CGRectMake(25, 25, 100, 100))
button2.backgroundColor = UIColor.cyanColor()
button2.addTarget(self, action: "bar", forControlEvents: .TouchDown)
view.addSubview(containerView)
containerView.addSubview(button2)
}
@IBAction func left() {
UIView.animateWithDuration(0.3) {
self.view.frame = CGRectMake(self.originalX - 150, self.originalY, self.view.frame.width, self.view.frame.height)
}
}
@IBAction func right() {
UIView.animateWithDuration(0.3) {
self.view.frame = CGRectMake(self.originalX, self.originalY, self.view.frame.width, self.view.frame.height)
}
}
func foo() {
UIView.animateWithDuration(1.0) {
self.view.backgroundColor = UIColor.redColor()
}
}
func bar() {
UIView.animateWithDuration(1.0) {
self.view.backgroundColor = UIColor.blueColor()
}
}
}
我沒有一個具體的答案給你,但我會看到的一件事就是你用「框架」動畫對象的方式,它是可能更好地動畫約束或變換。一個框架的動畫可以做到古怪的東西,而且不需要動畫變換。 – Loxx