[英]iOS: Animation Not working in observeValueForKeyPath
我用KVO 觀察了一個框架中的變化並相應地設置了另一個框架
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
if ([keyPath isEqualToString:KeyPathForFrameBeingObserved]) {
[UIView animateWithDuration:1 animations:^{
CGRect frame = [self playWithFrame:viewBeingMonitored.frame];
self.viewToAnimate.frame = frame;
}];
}
}
動畫塊中的代碼已執行,但動畫無法正常工作,我懷疑重復調用動畫方法可能會導致這種情況,但是使用日志消息后,我發現即使一次調用動畫也無法正常工作,有人可以解釋嗎?
iPad 2 /(iOS8.4)
dispatch_async(dispatch_get_main_queue(), ^{ ... });
但動畫仍然無法正常工作。 dispatch_after
將動畫方法延遲一秒鍾,以便僅使用隊列中的最后一個元素來運行它,以避免重復調用,但無效。 似乎您正在嘗試觀察UIKit對象的屬性。 請記住:
... UIKit框架的類通常不支持KVO ...
資料來源: https : //developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/KVO.html
因此,您必須檢查您的observeValueForKeyPath:ofObject:change:context:
實際上是否正在調用。
這是一個比較老的問題,但是我想我會回答其他人正在閱讀的情況。 您將需要調用setFrame來設置動畫的幀,而不是簡單的分配。
CGRect frame = [self playWithFrame:viewBeingMonitored.frame]; [self.viewToAnimate setFrame:frame];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.