簡體   English   中英

iOS:動畫在observeValueForKeyPath中不起作用

[英]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將動畫方法延遲一秒鍾,以便僅使用隊列中的最后一個元素來運行它,以避免重復調用,但無效。
  • KVO運行良好(添加了觀察器,但已處理完畢),但是動畫塊中的代碼是在沒有動畫的情況下執行的。

似乎您正在嘗試觀察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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM