UIAlertView
ユーザーがテキストフィールドにデータを入力せずに送信ボタンを押した場合にシェイクしたい。iOSで可能ですか?
質問する
2657 次
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 に答える