Swift - remove/add 来自 superView 的 UIView
Swift - remove/add UIView from superView
在我的项目中,我有一个名为 MakeWishView
的 UIView
,我通过点击这样的按钮让其出现:
@objc private func addWishButtonTapped(){
print("addWishButton tapped")
view.addSubview(makeWishView)
makeWishView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
makeWishView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
makeWishView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
makeWishView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
makeWishView.grayView.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
makeWishView.visualEffectView.alpha = 0
makeWishView.grayView.alpha = 0
makeWishView.wishButton.alpha = 0
makeWishView.closeButton.alpha = 0
makeWishView.dropDownButton.alpha = 0
makeWishView.wishNameTextField.alpha = 0
makeWishView.wishImage.alpha = 0
makeWishView.wishImageButton.alpha = 0
makeWishView.linkTextField.alpha = 0
makeWishView.priceTextField.alpha = 0
makeWishView.noteTextField.alpha = 0
makeWishView.linkImage.alpha = 0
makeWishView.priceImage.alpha = 0
makeWishView.noteImage.alpha = 0
UIView.animate(withDuration: 0.3) {
self.makeWishView.visualEffectView.alpha = 1
self.makeWishView.grayView.alpha = 1
self.makeWishView.wishButton.alpha = 1
self.makeWishView.closeButton.alpha = 1
self.makeWishView.dropDownButton.alpha = 1
self.makeWishView.wishNameTextField.alpha = 1
self.makeWishView.wishImage.alpha = 1
self.makeWishView.wishImageButton.alpha = 1
self.makeWishView.linkTextField.alpha = 1
self.makeWishView.priceTextField.alpha = 1
self.makeWishView.noteTextField.alpha = 1
self.makeWishView.linkImage.alpha = 1
self.makeWishView.priceImage.alpha = 1
self.makeWishView.noteImage.alpha = 1
self.makeWishView.grayView.transform = CGAffineTransform.identity
}
}
我驳斥这样的观点:
func dismissView(){
UIView.animate(withDuration: 0.3, animations: {
self.grayView.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
self.visualEffectView.alpha = 0
self.grayView.alpha = 0
self.wishButton.alpha = 0
self.closeButton.alpha = 0
self.dropDownButton.alpha = 0
self.wishNameTextField.alpha = 0
self.wishImage.alpha = 0
self.wishImageButton.alpha = 0
self.linkTextField.alpha = 0
self.priceTextField.alpha = 0
self.noteTextField.alpha = 0
self.linkImage.alpha = 0
self.priceImage.alpha = 0
self.noteImage.alpha = 0
}) { (_) in
self.visualEffectView.removeFromSuperview()
self.grayView.removeFromSuperview()
self.wishButton.removeFromSuperview()
self.closeButton.removeFromSuperview()
self.dropDownButton.removeFromSuperview()
self.wishNameTextField.removeFromSuperview()
self.wishImage.removeFromSuperview()
self.wishImageButton.removeFromSuperview()
self.linkTextField.removeFromSuperview()
self.priceTextField.removeFromSuperview()
self.noteTextField.removeFromSuperview()
self.linkImage.removeFromSuperview()
self.priceImage.removeFromSuperview()
self.noteImage.removeFromSuperview()
self.removeFromSuperview()
}
}
问题是,如果我想再次点击 addWishButton
,MakeWishView
不会显示,而是一个空的 view
:
我想我对如何关闭或添加 UIView
有一个简单的误解。感谢任何帮助:)
你删除这里的子视图
self.visualEffectView.removeFromSuperview()
self.grayView.removeFromSuperview()
self.wishButton.removeFromSuperview()
self.closeButton.removeFromSuperview()
self.dropDownButton.removeFromSuperview()
self.wishNameTextField.removeFromSuperview()
self.wishImage.removeFromSuperview()
self.wishImageButton.removeFromSuperview()
self.linkTextField.removeFromSuperview()
self.priceTextField.removeFromSuperview()
self.noteTextField.removeFromSuperview()
self.linkImage.removeFromSuperview()
self.priceImage.removeFromSuperview()
self.noteImage.removeFromSuperview()
self.removeFromSuperview()
您需要将视图声明为计算的 属性 而不是像
这样的存储的
var makeWishView:MakeWishView {
....
return
}
或仅在动画完成时执行此操作
self.removeFromSuperView()
并向后设置 alpha = 1
为什么要从他们的超级视图中删除以下视图?没看到你又加了
{ (_) in
self.visualEffectView.removeFromSuperview()
self.grayView.removeFromSuperview()
self.wishButton.removeFromSuperview()
self.closeButton.removeFromSuperview()
self.dropDownButton.removeFromSuperview()
self.wishNameTextField.removeFromSuperview()
self.wishImage.removeFromSuperview()
self.wishImageButton.removeFromSuperview()
self.linkTextField.removeFromSuperview()
self.priceTextField.removeFromSuperview()
self.noteTextField.removeFromSuperview()
self.linkImage.removeFromSuperview()
self.priceImage.removeFromSuperview()
self.noteImage.removeFromSuperview()
self.removeFromSuperview()
}
我认为您只需要调用以下代码即可:
{ (_) in
self.removeFromSuperview()
}
在我的项目中,我有一个名为 MakeWishView
的 UIView
,我通过点击这样的按钮让其出现:
@objc private func addWishButtonTapped(){
print("addWishButton tapped")
view.addSubview(makeWishView)
makeWishView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
makeWishView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
makeWishView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
makeWishView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
makeWishView.grayView.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
makeWishView.visualEffectView.alpha = 0
makeWishView.grayView.alpha = 0
makeWishView.wishButton.alpha = 0
makeWishView.closeButton.alpha = 0
makeWishView.dropDownButton.alpha = 0
makeWishView.wishNameTextField.alpha = 0
makeWishView.wishImage.alpha = 0
makeWishView.wishImageButton.alpha = 0
makeWishView.linkTextField.alpha = 0
makeWishView.priceTextField.alpha = 0
makeWishView.noteTextField.alpha = 0
makeWishView.linkImage.alpha = 0
makeWishView.priceImage.alpha = 0
makeWishView.noteImage.alpha = 0
UIView.animate(withDuration: 0.3) {
self.makeWishView.visualEffectView.alpha = 1
self.makeWishView.grayView.alpha = 1
self.makeWishView.wishButton.alpha = 1
self.makeWishView.closeButton.alpha = 1
self.makeWishView.dropDownButton.alpha = 1
self.makeWishView.wishNameTextField.alpha = 1
self.makeWishView.wishImage.alpha = 1
self.makeWishView.wishImageButton.alpha = 1
self.makeWishView.linkTextField.alpha = 1
self.makeWishView.priceTextField.alpha = 1
self.makeWishView.noteTextField.alpha = 1
self.makeWishView.linkImage.alpha = 1
self.makeWishView.priceImage.alpha = 1
self.makeWishView.noteImage.alpha = 1
self.makeWishView.grayView.transform = CGAffineTransform.identity
}
}
我驳斥这样的观点:
func dismissView(){
UIView.animate(withDuration: 0.3, animations: {
self.grayView.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
self.visualEffectView.alpha = 0
self.grayView.alpha = 0
self.wishButton.alpha = 0
self.closeButton.alpha = 0
self.dropDownButton.alpha = 0
self.wishNameTextField.alpha = 0
self.wishImage.alpha = 0
self.wishImageButton.alpha = 0
self.linkTextField.alpha = 0
self.priceTextField.alpha = 0
self.noteTextField.alpha = 0
self.linkImage.alpha = 0
self.priceImage.alpha = 0
self.noteImage.alpha = 0
}) { (_) in
self.visualEffectView.removeFromSuperview()
self.grayView.removeFromSuperview()
self.wishButton.removeFromSuperview()
self.closeButton.removeFromSuperview()
self.dropDownButton.removeFromSuperview()
self.wishNameTextField.removeFromSuperview()
self.wishImage.removeFromSuperview()
self.wishImageButton.removeFromSuperview()
self.linkTextField.removeFromSuperview()
self.priceTextField.removeFromSuperview()
self.noteTextField.removeFromSuperview()
self.linkImage.removeFromSuperview()
self.priceImage.removeFromSuperview()
self.noteImage.removeFromSuperview()
self.removeFromSuperview()
}
}
问题是,如果我想再次点击 addWishButton
,MakeWishView
不会显示,而是一个空的 view
:
我想我对如何关闭或添加 UIView
有一个简单的误解。感谢任何帮助:)
你删除这里的子视图
self.visualEffectView.removeFromSuperview()
self.grayView.removeFromSuperview()
self.wishButton.removeFromSuperview()
self.closeButton.removeFromSuperview()
self.dropDownButton.removeFromSuperview()
self.wishNameTextField.removeFromSuperview()
self.wishImage.removeFromSuperview()
self.wishImageButton.removeFromSuperview()
self.linkTextField.removeFromSuperview()
self.priceTextField.removeFromSuperview()
self.noteTextField.removeFromSuperview()
self.linkImage.removeFromSuperview()
self.priceImage.removeFromSuperview()
self.noteImage.removeFromSuperview()
self.removeFromSuperview()
您需要将视图声明为计算的 属性 而不是像
这样的存储的var makeWishView:MakeWishView {
....
return
}
或仅在动画完成时执行此操作
self.removeFromSuperView()
并向后设置 alpha = 1
为什么要从他们的超级视图中删除以下视图?没看到你又加了
{ (_) in
self.visualEffectView.removeFromSuperview()
self.grayView.removeFromSuperview()
self.wishButton.removeFromSuperview()
self.closeButton.removeFromSuperview()
self.dropDownButton.removeFromSuperview()
self.wishNameTextField.removeFromSuperview()
self.wishImage.removeFromSuperview()
self.wishImageButton.removeFromSuperview()
self.linkTextField.removeFromSuperview()
self.priceTextField.removeFromSuperview()
self.noteTextField.removeFromSuperview()
self.linkImage.removeFromSuperview()
self.priceImage.removeFromSuperview()
self.noteImage.removeFromSuperview()
self.removeFromSuperview()
}
我认为您只需要调用以下代码即可:
{ (_) in
self.removeFromSuperview()
}