我有一個CALayer子類,它受限於父層的寬度,但是具有固定的高度。我想隱式動畫禁用調整窗口的大小,但每當我設置圖層的高度時啓用。選擇性覆蓋CALayer隱式動畫
要禁用動畫時,窗口大小我設置圖層的行動
NSMutableDictionary *actions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"bounds", [NSNull null], @"position", nil];
,這似乎工作。然後,我已經覆蓋了actionForKey:方法我的層子
- (id<CAAction>)actionForKey:(NSString *)event
{
if ([event isEqualToString:@"frame.size.height"]) {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"frame.size.height"];
[animation setDuration:0.5f];
return animation;
}
return nil;
}
但後來當我改變我的層的高度與
[layer setValue:[NSNumber numberForFloat:50.0] forKey:@"frame.size.height"];
高度的變化,但沒有設置動畫。我看到了使用frame.size.height調用的actionForKey:方法,但不管我返回的是否都是動畫。如果我沒有設置動作,或者有actionForKey:方法,那麼高度動畫正確,但是窗口大小調整也是動畫的,我不想要。另外,也許我誤解了,但我認爲從actionForKey返回nil:會使默認動畫運行,但它似乎即使存在的方法停止所有隱式動畫(無論操作字典設置與否)。
我在這裏錯過了什麼,我會很感激任何指針。
謝謝,掃清事情了。我結束了CAConstraintsLayoutManager的子類化並禁用了layoutSublayersOfLayer:方法中的操作。它似乎工作,但我不知道這是否是最好的方式來做到這一點。 – iain 2011-04-08 17:28:23
關於正確的聲音。我讓我的觀點本身採用'CALayoutManager'協議來做一個相關的,稍微簡單的案例。很高興我能幫上忙。 – 2011-04-08 17:37:25
它看起來也適用於禁用父圖層的layoutSublayers方法中的操作。 – iain 2011-04-08 17:41:44