기본보기에서 하위보기를 제거하려면 (하위보기는 부모보기를 "희미하게합니다", 따라서 dimView라고 부름) 애니메이션을 사용합니다. 이건 내 지연 클래스입니다메인 스레드에서 클로저를 호출 할 때 애니메이션이 무시되는 이유는 무엇입니까?
@IBAction func done(sender: AnyObject) {
let dimView = view.viewWithTag(1)
if let dimView = dimView {
removingAnimation(dimView)
Delay.delay(0.4){
dimView.removeFromSuperview()
}
}
}
:이 애니메이션과 같이 호출 이벤트 구동 기능을 통해 다음
let centerY = CGRectGetMidY(view.bounds)
let animation: CABasicAnimation = CABasicAnimation(keyPath: "position")
animation.removedOnCompletion = false
animation.fillMode = kCAFillModeForwards
animation.fromValue = NSValue(CGPoint: view.center)
animation.toValue = NSValue(CGPoint: CGPoint(x: view.center.x, y: 4 * centerY))
animation.duration = 0.2
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
dimView.layer.addAnimation(animation, forKey: "DimRemovingAnimation")
: 그것은 기본적으로 화면의 아래쪽으로 결국 화면 밖으로 서브 뷰를 이동 :
class Delay{
class func delay(delay: Double, block:() ->()){
let when = dispatch_time(DISPATCH_TIME_NOW, Int64(Int(delay) * Int(NSEC_PER_SEC)))
dispatch_after(when, dispatch_get_main_queue(), block)
}
}
나는 메인 스레드에서이 폐쇄 실행 (직렬 실이며, 직렬 방식으로 작업을 실행한다) 내 애니메이션이 무시되고 dimView이 R 인 경우 한 번에 뷰 계층 구조에서 제거되었습니다. 그러나 전역 동시 스레드에서 클로저를 실행하면 애니메이션이 무시되지 않고 코드가 계층 구조의 dimView를 성공적으로 제거합니다. 그러나 이것은 주 스레드에서 UIKit에 액세스해야하기 때문에 불법입니다.
주 스레드에서 클로저를 호출 할 때 문제가 무엇인지 설명해 주시겠습니까? 그리고 내 문제에 대한 가능한 해결책?
감사