[英]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.