NSButton 在 CATransform3DMakeTranslation 之后不可调用
NSButton not callable after CATransform3DMakeTranslation
我有一个奇怪的问题,在 iOS
中从未见过,但在 macOS Swift
开发中出现。
我有一个 NSButton
,它通过 addSubview
方法添加到自定义 NSView
。该按钮具有目标功能。
添加到 customView
后,无法单击此按钮。如果我将它添加到全局 "view" 直接工作正常。
知道为什么会这样吗?
//Infos View
self.infosView.wantsLayer = true
self.infosView.layer?.backgroundColor = NSColor.darkGray.cgColor
self.view.addSubview(self.infosView)
//TestButton
let myButtonRect = CGRect(x: 100, y: 100, width: 200, height: 200)
self.testButton = NSButton.init(frame: myButtonRect)
// !!!!
// this line doesn't work
// !!!!
self.infosView.addSubview(testButton)
// !!!!
// but this line works fine
// !!!!
self.view.addSubview(testButton)
self.testButton.target = self
self.testButton.action = #selector(ViewController.printSomething)
更新:测试按钮在 CATransform
后不可点击
self.infosView.layer?.transform = CATransform3DMakeTranslation(500, 0, 0)
此后无效..
我把这个问题的答案贴在这里。问题是 NSView 的限制。
1- 创建一个 NSLayoutConstraints() 变量
2-设置NSView的约束
self.infosView.translatesAutoresizingMaskIntoConstraints = false
self.leadingConstraint = self.infosView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: -500)
self.leadingConstraint.isActive = true
self.infosView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
self.infosView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0, constant: 500).isActive = true
self.infosView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0, constant: (NSScreen.main?.frame.height)!).isActive = true
3 - 然后当我想更新包含 NSButton
的 NSView 时
self.leadingConstraint.constant = 0
runAnimation(duration: 0.5, {
self.testButton.superview?.layoutSubtreeIfNeeded()
self.infosViewOpened = true
})
我有一个奇怪的问题,在 iOS
中从未见过,但在 macOS Swift
开发中出现。
我有一个 NSButton
,它通过 addSubview
方法添加到自定义 NSView
。该按钮具有目标功能。
添加到 customView
后,无法单击此按钮。如果我将它添加到全局 "view" 直接工作正常。
知道为什么会这样吗?
//Infos View
self.infosView.wantsLayer = true
self.infosView.layer?.backgroundColor = NSColor.darkGray.cgColor
self.view.addSubview(self.infosView)
//TestButton
let myButtonRect = CGRect(x: 100, y: 100, width: 200, height: 200)
self.testButton = NSButton.init(frame: myButtonRect)
// !!!!
// this line doesn't work
// !!!!
self.infosView.addSubview(testButton)
// !!!!
// but this line works fine
// !!!!
self.view.addSubview(testButton)
self.testButton.target = self
self.testButton.action = #selector(ViewController.printSomething)
更新:测试按钮在 CATransform
self.infosView.layer?.transform = CATransform3DMakeTranslation(500, 0, 0)
此后无效..
我把这个问题的答案贴在这里。问题是 NSView 的限制。
1- 创建一个 NSLayoutConstraints() 变量
2-设置NSView的约束
self.infosView.translatesAutoresizingMaskIntoConstraints = false
self.leadingConstraint = self.infosView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: -500)
self.leadingConstraint.isActive = true
self.infosView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
self.infosView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0, constant: 500).isActive = true
self.infosView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0, constant: (NSScreen.main?.frame.height)!).isActive = true
3 - 然后当我想更新包含 NSButton
的 NSView 时self.leadingConstraint.constant = 0
runAnimation(duration: 0.5, {
self.testButton.superview?.layoutSubtreeIfNeeded()
self.infosViewOpened = true
})