我試圖隱藏或顯示根據DCRoundSwitch對象的值的視圖,但是UIView的動畫塊不動畫 - 將立即應用更改。我也嘗試使用CATransaction爲視圖的圖層製作動畫,但這些更改也是即時應用的。如果同一個動畫塊被移動到另一個位置(比如viewWillAppear :),那麼動畫工作正常。的UIView動畫動畫沒有價值更改事件
任何幫助確定爲什麼動畫不能正常工作是極大的讚賞。謝謝!
這裏的動畫代碼:
- (void)switchValueChanged:(id)sender
{
[UIView animateWithDuration:0.33
animations:^{
self.containerView.alpha = self.switchView.isOn ? 1 : 0;
}];
}
以供參考,在這裏是DCRoundSwitch用來改變開關值的代碼。 animated
是YES
和ignoreControlEvents
是NO
。
- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents
{
BOOL previousOn = self.on;
on = newOn;
ignoreTap = YES;
[CATransaction setAnimationDuration:0.014];
knobLayer.gripped = YES;
// setup by turning off the manual clipping of the toggleLayer and setting up a layer mask.
[self useLayerMasking];
[self positionLayersAndMask];
[CATransaction setCompletionBlock:^{
[CATransaction begin];
if (!animated)
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
else
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
CGFloat minToggleX = -toggleLayer.frame.size.width/2.0 + toggleLayer.frame.size.height/2.0;
CGFloat maxToggleX = -1;
if (self.on)
{
toggleLayer.frame = CGRectMake(maxToggleX,
toggleLayer.frame.origin.y,
toggleLayer.frame.size.width,
toggleLayer.frame.size.height);
}
else
{
toggleLayer.frame = CGRectMake(minToggleX,
toggleLayer.frame.origin.y,
toggleLayer.frame.size.width,
toggleLayer.frame.size.height);
}
if (!toggleLayer.mask)
{
[self useLayerMasking];
[toggleLayer setNeedsDisplay];
}
[self positionLayersAndMask];
knobLayer.gripped = NO;
[CATransaction setCompletionBlock:^{
[self removeLayerMask];
ignoreTap = NO;
// send the action here so it get's sent at the end of the animations
if (previousOn != on && !ignoreControlEvents)
[self sendActionsForControlEvents:UIControlEventValueChanged];
}];
[CATransaction commit];
}];
}
此外:如果我用UISwitch替換DCRoundSwitch,動畫工作,所以它必須是關於交換機的動畫塊。有誰知道'CATransaction'有任何問題嗎? – Austin
在任何人詢問之前,我不能在最終產品中使用'UISwitch',因爲'DCRoundSwitch'提供'UISwitch'不提供的定製選項。 – Austin
我沒有看到你在最初的交易中致電[CATransaction begin]。然而......更可疑的是使用口罩。可疑的是,你正在嘗試製作一個alpha值,同時搞亂了一個面具。由於我無法確切知道你在做什麼,我不知道它是否會產生影響。一般來說(根據我的經驗):如果您在動畫塊內(或在此情況下與另一個動畫塊同時)直接或間接地對影響屬性(如alpha)的某些內容提供多個更改,... – Matt