0

カスタムUISwitchDCRoundSwitchのセレクターメソッド内でアニメーションの次のコードを実行しました。

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ブロックアニメーションを使用して解決しようとしましたが、それでも問題に直面しています。

案内してください。

4

2 に答える 2

1

問題はDCRoundSwitch'sアニメーションブロックにあります。スイッチの値の変更に応答して呼び出されたときにメソッドが正しく機能しない結果とCATransactionなる完了ブロックにNoが作成されます。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];
}

それはそれをする必要があります

于 2012-12-28T03:45:13.667 に答える
0

以下のコードを使用しました。これは正しく動作します。

このスレッドをフォローしてください

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

U は、この DCRoundSwitch を使用しているクラスに移動するだけで、そのクラスの dealloc メソッドにこの行を追加できます。

 - (void)dealloc
 {
      [self.MyDCRoundSwitch removeTarget:nil
                         action:NULL
                         forControlEvents:UIControlEventAllEvents];
      [super dealloc];
 }
于 2013-03-22T13:45:56.210 に答える