- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我不明白为什么 UIView 的 removeFromSuperview
调用 didMoveToSuperview
。
我认为 didMoveToSuperview
仅在将 View 添加到 View 时调用。谁能解释为什么 removeFromSuperview
调用 didMoveToSuperview
?
这是我在 removeFromSuperview
中所做的:
public override func removeFromSuperview() {
clearDelegates()
chaosPad?.removeFromSuperview()
brushSliders?.removeFromSuperview()
moodSlider?.removeFromSuperview()
brushShapeMenu?.removeFromSuperview()
moodMenu?.removeFromSuperview()
gravityMenu?.removeFromSuperview()
rotationMenu?.removeFromSuperview()
menuGroups = []
centerButtons = []
scrollMenuItems = []
menu?.removeFromSuperview()
menu = nil
super.removeFromSuperview()
}
func clearDelegates() {
chaosPad?.delegate = nil
viewController = nil
}
这里是显示如何调用 didMoveToSuperview
的调用堆栈:
#0 0x0000000110f39708 in specialized _fatalErrorMessage(StaticString, StaticString, StaticString, UInt) -> () ()
#1 0x000000010b9cb960 in TDTOilistMenuPainting.configureFrames() -> () at /FastDev/TDTPhotoLib/Oilist/Classes/TDTOilistMenuPainting.swift:161
#2 0x000000010b9cb83e in TDTOilistMenuPainting.didMoveToSuperview() -> () at /FastDev/TDTPhotoLib/Oilist/Classes/TDTOilistMenuPainting.swift:146
#3 0x000000010b9cb872 in @objc TDTOilistMenuPainting.didMoveToSuperview() -> () ()
#4 0x000000010f5d1db5 in __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke ()
#5 0x000000010dc87c60 in -[NSISEngine withBehaviors:performModifications:] ()
#6 0x000000010f5d19b1 in -[UIView(Hierarchy) _postMovedFromSuperview:] ()
#7 0x000000010f5cf610 in __UIViewWasRemovedFromSuperview ()
#8 0x000000010f5cf107 in -[UIView(Hierarchy) removeFromSuperview] ()
#9 0x000000010b9c9aba in TDTOilistMenuPainting.removeFromSuperview() -> () at /FastDev/TDTPhotoLib/Oilist/Classes/TDTOilistMenuPainting.swift:73
#10 0x000000010ba6d269 in TDTPaintingViewController.(navigationController(UINavigationController, animationControllerForOperation : UINavigationControllerOperation, fromViewController : UIViewController, toViewController : UIViewController) -> UIViewControllerAnimatedTransitioning?).(closure #2) at /FastDev/TDTPhotoLib/Oilist/Classes/TDTPaintingViewController.swift:2706
最佳答案
这是正常行为。 didMoveToSuperview
会在 View 的父 View 发生更改时被调用,即使它更改为 nil
。您可以在该方法中检查父 View 是否为 nil 以确定它是否已添加到其父 View 或从其父 View 中删除,例如:
override func didMoveToSuperview() {
if let superview = self.superview {
// the view was added as a subview to superview
}
else {
// the view was removed from its superview
}
}
关于ios - UIView removeFromSuperview 正在调用 didMoveToSuperview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580759/
我正在将 UIScrollView 添加到 UIView。 ScrollView 上的 willMoveToSuperview: 被调用,但由于某种原因, ScrollView 上的 didMoveT
我不明白为什么 UIView 的 removeFromSuperview 调用 didMoveToSuperview。 我认为 didMoveToSuperview 仅在将 View 添加到 View
如果应用在 Retina 4 设备上运行,我将使用此 UIImage 类别自动查找正确的资源: http://www.sourcedrop.net/FY53a14b0127f 如果 UIImage 在
我正在处理自定义 UIView。我让一切正常工作,但我的设计要求规定 View 的某些部分应该在加载时进行动画处理。 我的 View 是按以下方式设置的,我选择了动画约束: 所以我在 didMoveT
我是一名优秀的程序员,十分优秀!