3

UIAlertViewユーザーがテキストフィールドにデータを入力せずに送信ボタンを押した場合にシェイクしたい。iOSで可能ですか?

ここに画像の説明を入力

4

3 に答える 3

2

まず、ヘッダーファイル内に追加します

int direction;
int shakes;

UIAlertViewが閉じないようにするため。keep-uialertview-displayedリンクを参照してください。また、prevent-alertview-dismissalリンクも参照してください。

UIAlertViewDelegateを使用します。

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
  if (buttonIndex == 0)
    //do here something
  else if (buttonIndex == 1){
    if(txtField.text.length == 0 || txtField1.text.length == 0) //check your two textflied has value
    {
      direction = 1;
      shakes = 0;
    }
  }
}

このメソッドを追加します。

-(void)shake:(UIAlertView *)theOneYouWannaShake
{
  [UIView animateWithDuration:0.03 animations:^
                                  {
                                    theOneYouWannaShake.transform = CGAffineTransformMakeTranslation(5*direction, 0);
                                  } 
                                  completion:^(BOOL finished) 
                                  {
                                    if(shakes >= 10)
                                    {
                                      theOneYouWannaShake.transform = CGAffineTransformIdentity;
                                      return;
                                    }
                                    shakes++;
                                    direction = direction * -1;
                                    [self shake:theOneYouWannaShake];
                                  }];
}

アニメーションについてはこちらをご覧ください

于 2012-10-31T08:25:31.647 に答える
1

ShakingAlertViewは、この機能を実装する UIAlertView サブクラスです。

免責事項: 私は ShakingAlertView の開発者です

于 2013-03-04T11:45:34.387 に答える
0

ここで、コードは検証が失敗したときにこのメソッドを呼び出します

- (void)animateView 
{
  CAKeyframeAnimation *animation;
        animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];
        animation.duration = 2.0;
        animation.cumulative = NO;
        animation.repeatCount = MAXFLOAT;
        animation.values = [NSArray arrayWithObjects:
                            [NSNumber numberWithFloat: 0.0], 
                            [NSNumber numberWithFloat: DEGREES_TO_RADIANS(-4.0)], 
                            [NSNumber numberWithFloat: 0.0],
                            [NSNumber numberWithFloat: DEGREES_TO_RADIANS(4.0)],
                            [NSNumber numberWithFloat: 0.0], nil];
        animation.fillMode = kCAFillModeBoth;
        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
        animation.removedOnCompletion = NO;
        [[alertView layer] addAnimation:animation forKey:@"effect"];
}

アニメーションを停止したいときはいつでもこのアニメーションを呼び出します

- (void)stopAnimatiomn
{
    [[alertView layer] removeAnimationForKey:@"effect"];
}
于 2012-10-31T08:25:16.467 に答える