我决定手动设置对象的动画,因此为UIView
类制作了扩展名:
public extension UIView{
func slideOut(){
UIView.animateWithDuration(0.5, animations: { self.frame.origin.x = -self.frame.width }, completion: finishedDisposing)
}
func finishedDisposing(successfully: Bool){
if !successfully{
((UIApplication.sharedApplication().delegate as! AppDelegate).window!.rootViewController as! VC).showSystemMessage("Failed to dispose one or more subviews from superview", ofType: .NOTICE)
}
responder.viewDisposed()
}
}
哪个好用,我对此没有任何问题,但我在VC中有一个方法(自定义UIViewController
)viewDisposed()
,只要视图滑出视线并且它有这样的实现就会被调用:
func viewDisposed() {
disposed++
print("Updated disposed: \(disposed) / \(self.view.subviews.count)")
if disposed == self.view.subviews.count - 1{
delegate.vcFinishedDisposing()
}
}
它显示self.view.subviews
包含我的所有自定义视图+ 3个以上(UIView,_UILayoutGuide x 2)。虽然不调用responder.viewDisposed
方法,但它们确实扩展了UIView。我的决定是弄清楚如何获取每个子视图的类和Mirror(reflecting: subView).subjectType
如果我打印它就会非常好。有没有办法真正将它与任何东西进行比较,或者更好的是,获得String
表示?基本上,我希望你帮我创建一个方法来创建一个子视图的堆栈,这些子视图不是UIView类型(只有subClasses),也不是_UILayoutGuide。谢谢!
答案 0 :(得分:1)
您可能最好直接创建一个只关注您所关注的子视图的数组,而不是从所有子视图开始并尝试过滤掉您不关心的子视图。这些布局指南并不总是存在 - 它们是在iOS 7中添加的。谁知道Apple将来会添加什么?
反正:
let mySubviews = view.subviews.filter {
!["UIView", "_UILayoutGuide"].contains(NSStringFromClass($0.dynamicType))
}