2

やや奇妙な問題が手元にあります。私はUITextFieldを持っています。この TextField は、ボタンがタップされると幅が変更されます。そのために、私は最初に次のことを行いました。

CGRect newbounds = originalBounds;
newbounds.size.width = newbounds.size.width/2;

[UIView beginAnimations:nil context:nil];
self.textField2.bounds = newbounds;
[UIView commitAnimations];

十分に簡単で、うまくいきました。次に、アニメーションをもう少し制御できるようにします。そのために、次の手順を使用して CABasicAnimation まで次のレベルに進みます。

CGRect newbounds = originalBounds;
newbounds.size.width = newbounds.size.width/2;

CABasicAnimation *animShrink = [CABasicAnimation animation];
animShrink.keyPath = @"bounds";
animShrink.toValue = [NSValue valueWithCGRect:newbounds];
animShrink.duration = 0.5;
animShrink.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animShrink.delegate = self;

[self.textField2.layer addAnimation:animShrink forKey:@"shrink"];

http://coldstorage.macbonsai.com/public/cabasic_animation_clipping.png ( Stackoverflowによると、「画像を投稿するには少なくとも 10 の評判が必要だからです」 )。

そこで、次のバージョンのアニメーションを試しました。

CGRect newbounds = originalBounds;
newbounds.size.width = newbounds.size.width/2;

CABasicAnimation *animShrink = [CABasicAnimation animation];
animShrink.keyPath = @"bounds.size.width";
animShrink.fromValue = [NSNumber numberWithFloat:originalBounds.size.width];
animShrink.toValue = [NSNumber numberWithFloat:newbounds.size.width];
animShrink.duration = 0.5;
animShrink.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animShrink.delegate = self;

[self.textField2.layer addAnimation:animShrink forKey:@"shrink"];

それでも同じ問題が発生しました。この時点で、UITextField からすべての制約を削除し、CABasicAnimation の両方のバージョンを試しました。同じ問題。この時点で、他に何をすべきかわかりません。どんな助けでも大歓迎です。

よろしくお願いします。

4

1 に答える 1

0

ボタンのスタイルを UITextBorderStyleNone に変更すると、クリップされません。

私の推測では、スタイルが UITextBorderStyleRoundedRect の場合、Apple はおそらく「丸い四角形」画像を含むボタンに UIImageView を追加するだけなので、ボタンのレイヤーをアニメーション化すると、そのサブビューは一緒にアニメーション化しません。iOS では明示的にする必要があるためです。すべてのサブレイヤーをアニメーション化します。

于 2014-03-13T16:03:50.860 に答える