Анимация UIView не работает при использовании с DCRoundSwitch
Я сделал следующий код для анимации внутри метода селектора пользовательского UISwitch DCRoundSwitch.
if ([[[App.remindersArray objectAtIndex:0] objectAtIndex:3]isEqualToString:@"YES"]){
[firstReminderOnOffButton setSelected:YES];
[swtchDailyReminder setOn:YES];
imgviewDailyReminder.image=[UIImage imageNamed:@"nDailyReminder_On_1.png"];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.35];
[UIView setAnimationDidStopSelector:@selector(animateFadingIn)];
[UIView setAnimationDelegate:self];
imgviewDailyReminderAnimation.alpha = 1.0;
[UIView commitAnimations];
}
else
{
[firstReminderOnOffButton setSelected:NO];
[swtchDailyReminder setOn:NO];
imgviewDailyReminder.image=[UIImage imageNamed:@"xDailyReminder_OFF.png"];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.35];
[UIView setAnimationDidStopSelector:@selector(animateFadingIn)];
[UIView setAnimationDelegate:self];
imgviewDailyReminderAnimation.alpha = 0.0;
[UIView commitAnimations];
}
Проблема в том, что анимация работает правильно, когда код выше вызывается из обычного UISwitch, но не работает при вызове из DCRoundSwitch.
Также попытался решить с помощью анимации блока UIView.... но все еще сталкивается с проблемой.
Пожалуйста, ведите меня.
2 ответа
Вопрос в DCRoundSwitch's
блок анимации. нет CATransaction
создается в блоке завершения setOn:animated:ignoreControlEvents:
в результате чего [UIView animateWithDuration...]
методы не работают должным образом при вызове в ответ на изменение значения переключателя.
Чтобы решить проблему, просто измените:
if (previousOn != on && !ignoreControlEvents)
[self sendActionsForControlEvents:UIControlEventValueChanged];
Для того, чтобы:
if (previousOn != on && !ignoreControlEvents)
{
[CATransaction begin];
[CATransaction setDisableActions:NO];
[self sendActionsForControlEvents:UIControlEventValueChanged];
[CATransaction commit];
}
Это должно сделать это
Я использовал этот код ниже. который работает правильно.
Пожалуйста, продолжайте эту тему
https://github.com/domesticcatsoftware/DCRoundSwitch/issues/12
Вы можете просто перейти к классу, который использует этот DCRoundSwitch, в методе dealloc этого класса поставить эту строку.
- (void)dealloc
{
[self.MyDCRoundSwitch removeTarget:nil
action:NULL
forControlEvents:UIControlEventAllEvents];
[super dealloc];
}