3

ボタンにアニメーションを追加して、ボタンがポイントAからポイントBを削除するようにしたいの
ですが、次のコードでそれを実行できます。しかし、奇妙なことに、ボタンを動かすと、タッチを検出できなくなります。
ボタンの元の場所をタップすると、ボタンイベントがトリガーされる可能性があります。コードに不足しているものはありますか?私を助けてください。

- (IBAction)button:(id)sender
{

UIButton    *lineButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[lineButton addTarget:self   action:@selector(press:)forControlEvents:UIControlEventTouchUpInside];
[lineButton setFrame:CGRectMake(50, 50, 50, 50)];
[self.view addSubview:lineButton];
CABasicAnimation *lineAnimation;


lineAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
[lineAnimation setRemovedOnCompletion:NO];
[lineAnimation setDuration:0.15];


[lineAnimation setFillMode:kCAFillModeForwards];
[lineAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];

CGRect rect = CGRectMake(100, 200, 50, 50);
    lineAnimation.fromValue = [NSValue valueWithCGPoint: CGPointMake(50, 50)];
    lineAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(CGRectGetMidX(rect),   CGRectGetMidY(rect))];
[lineAnimation setAutoreverses:NO];
[lineButton.layer addAnimation:lineAnimation forKey:@"line"];
}
4

2 に答える 2

2

次のようなaddAnimationメソッドの後で、新しいフレームとレイヤーをボタンのフレーム/レイヤーに設定する必要があります。

lineButton.frame = rect
lineButton.layer.frame = rect

または、次のようなアニメーションブロック(使いやすい、コードの見栄えなど)を単純に使用できます。

[UIView animateWithDuration:0.15 animations:^{
  lineButton.frame = CGRectMake(100, 200, 50, 50);
}];
于 2012-07-18T12:23:06.477 に答える
0

interfacebuilderで、ボタンとセットフレームの自動サイズ変更プロパティを適切に設定します。デバイスまたはシミュレーターを回転させると、フレームのサイズ変更が自動的に行われます。その後、元のフレームが失われます。

于 2012-07-18T12:08:31.293 に答える