Анимация 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 .... но все еще сталкивался с проблемой.

Пожалуйста, помогите мне.


person niks    schedule 25.09.2012    source источник


Ответы (2)


Проблема в блоке анимации DCRoundSwitch's. В блоке завершения setOn:animated:ignoreControlEvents: не создается CATransaction, в результате чего методы [UIView animateWithDuration...] не работают должным образом при вызове в ответ на изменение значения переключателя.

Чтобы решить проблему, просто измените:

if (previousOn != on && !ignoreControlEvents)
[self sendActionsForControlEvents:UIControlEventValueChanged];

To:

if (previousOn != on && !ignoreControlEvents)
{
[CATransaction begin];
[CATransaction setDisableActions:NO];
[self sendActionsForControlEvents:UIControlEventValueChanged];
[CATransaction commit];
}

Это должно сделать это

person Chris Wooden    schedule 28.12.2012

я использовал этот код ниже. который работает правильно.

Пожалуйста, следите за этой темой

https://github.com/domesticcatsoftware/DCRoundSwitch/issues/12

Вы можете просто перейти к классу, который использует этот DCRoundSwitch , в методе Dealloc этого класса поместите эту строку.

 - (void)dealloc
 {
      [self.MyDCRoundSwitch removeTarget:nil
                         action:NULL
                         forControlEvents:UIControlEventAllEvents];
      [super dealloc];
 }
person Vijay-Apple-Dev.blogspot.com    schedule 22.03.2013