1

ボタンを使用して3つの異なる位置で画像の位置を変更したいと思います...私のコードでは、画像は位置から移動するだけです...

ViewController.h

@property (weak, nonatomic) IBOutlet UIImageView *Switch3Way;

- (IBAction)Switch3WayPressed:(id)sender;

ViewController.m

- (void)Switch3WayPressed:(id)sender {
CGRect frame = Switch3Way.frame;
frame.origin.x = 323;
frame.origin.y = 262;
Switch3Way.frame = frame;

}

4

2 に答える 2

1

次のコードは、Switch3Way UIImageView IBOutlet プロパティをアニメーション化することを前提としています。このコード スニペットは、UIImageView を 3 つの異なる場所に移動し、最後の位置でアニメーションを停止します。

#import <QuartzCore/QuartzCore.h>    

-(IBAction)move:(id)sender
{
    CGPoint firstPosition = CGPointMake(someXvalue, someYvalue);
    CGPoint secondPosition = CGPointMake(someXvalue, someYvalue);
    CGPoint thirdPosition  = CGPointMake(someXvalue, someYvalue);

    CABasicAnimation *posOne = [CABasicAnimation animationWithKeyPath:@"position"];
    posOne.fromValue = [NSValue valueWithCGPoint:_Switch3Way.layer.position];
    posOne.toValue   = [NSValue valueWithCGPoint:firstPosition];
    posOne.beginTime = 0;
    posOne.duration  = 1;

    CABasicAnimation *posTwo = [CABasicAnimation animationWithKeyPath:@"position"];
    posTwo.fromValue = [NSValue valueWithCGPoint:firstPosition];
    posTwo.toValue   = [NSValue valueWithCGPoint:secondPosition];
    posTwo.beginTime = 1;
    posTwo.duration  = 1;

    CABasicAnimation *posThree = [CABasicAnimation animationWithKeyPath:@"position"];
    posThree.fromValue = [NSValue valueWithCGPoint:secondPosition];
    posThree.toValue   = [NSValue valueWithCGPoint:thirdPosition];
    posThree.beginTime = 2;
    posThree.duration  = 1;

    CAAnimationGroup *anims = [CAAnimationGroup animation];
    anims.animations = [NSArray arrayWithObjects:posOne, posTwo, posThree, nil];
    anims.duration = 3;
    anims.fillMode = kCAFillModeForwards;
    anims.removedOnCompletion = NO;

    [_Switch3Way.layer addAnimation:anims forKey:nil];

    _Switch3Way.layer.position = thirdPosition;
}

Invasivecode には、アニメーションの作成に関するかなり優れた一連のチュートリアルがあります。たとえば、 http: //weblog.Investigationcode.com/post/4448661320/core-animation-part-iii-basic-animations を参照しているように、最終的に CAKeyframeAnimation オブジェクトを使用してこれらの種類のアニメーションを作成できますが、CABasicAnimation を理解することは、CoreAnimation でアニメーションの作成を開始するための良い方法です。

于 2013-10-19T21:21:02.493 に答える
1

ボタンを 3 つの異なる場所に移動する必要がある理由を教えてください。とにかく、いくつかのロジックに基づいて変更を行うことを願っています。そのため、ヘッダー ファイルで 3 つの列挙型を定義します。たとえば、次のようなものです。

typedef enum {
buttonState1,
buttonState2,
buttonState3
} buttonState;

次に、ビジネス ロジックの要件に従って、これらの enum 変数をコード内の適切な場所に設定します。たとえば、次のようになります。

-(void)setButtonState{

buttonState = buttonState1;

}

次に、ボタン touch-up-inside ハンドラ ルーチンで、switch ステートメントを使用して適切なフレームを設定します。たとえば、次のようになります。

- (void)Switch3WayPressed:(id)sender {
    if (![sender isKindOfClass:[Switch3Way class]])
    return;
 switch (buttonState)

 {
 case buttonState1:
      {
      CGRect frame = Switch3Way.frame;
      frame.origin.x = 323;
      frame.origin.y = 262;
      Switch3Way.frame = frame;
      break;
   }
 case buttonState2:
      //some other rect origin based on your logic
      break;
 case buttonState3:
      //some other rect origin based on your logic
      break;
 default:
      break;

 }
于 2013-10-19T00:18:11.393 に答える