ボタンを押しているときにimage viewをちょっとずつ動かすアニメーションについて

[code]

    [UIView animateWithDuration:0 
                          delay:0
                        options:UIViewAnimationOptionCurveEaseIn
                         animations:^{
      　      self.view.transform=CGAffineTransformMakeTranslation(0, 0);}
    completion:^ 
    {
    }];
    
[/code]

上記のアニメーションの書き方は途中で止めるのに向いていないことは分かりました。

ストーリーボードを使っていて `UIControlEventTouchDown` の `sender` です

[code]

    - (IBAction)botan:(UIButton *)sender {
        CGRect frame = self.viewname.frame;
        frame.origin.x += 5;
        [self.viewname setFrame:frame];
    }
    
[/code]

これを、ボタンが押されている限り繰り返させるのはどうしたらいいんでしょうか  
繰り返せたとして滑らかではないと思うのですがどうしたら滑らかに動かせるんでしょうか

ド初心者なので触って覚えていこうと思っています  
宜しくお願いします




アニメーションといわれて、まず思い浮かぶのが、UIViewの「animation〜」で始まるメソッド群と、CAAnimationフレームワークですが、これらは、画面遷移のときに、ビューを左右上下にスライドさせるとか、オブジェクトをタップしたら、すこし震えてみせるとか、ユーザ操作に反応していることを示す、視覚効果で使うことを意図したもので、せいぜい1秒以下のアニメーションが、前提になっています。  
iOS
7より、UIDynamicsという、よりおおがかりなアニメーションを、UIViewサブクラスに与えるフレームワークが追加されました。これはCPUでなくGPU（Graphic
Proccessing Unit）を使うので、マシンの負担が小さいわりに、スムーズなアニメーションを実現できます。

[code]

    #import "ViewController.h"
    
    @interface ViewController ()
    
    // アニメーションの対象のイメージビュー、imageView
    @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    // UIViewにアニメーション機能を追加するクラス、UIDynamicAnimator
    @property (nonatomic) UIDynamicAnimator *animator;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // ViewControllerのベースビューに、アニメーションを組みこむ。
        self.animator = [[UIDynamicAnimator alloc] initWithReferenceView: self.view];
    }
    
    // 画面上の任意の場所をタップ。
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        // 「ふるまい」を定義するクラスを生成。このふるまいに従うアイテム（UIViewサブクラス）を配列（NSArray）で登録。
        UIDynamicItemBehavior *moveBehavior = [[UIDynamicItemBehavior alloc] initWithItems: @[self.imageView]];
        // 直線運動という「ふるまい」を定義。方向とスピード、動かすアイテムを指定。
        [moveBehavior addLinearVelocity: CGPointMake(0.0, 50.0) forItem: self.imageView];
        // アニメーション開始。
        [self.animator addBehavior: moveBehavior];
    }
    
    // タップした指を、画面から離す。
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
        // アニメーションの終了。
        [self.animator removeAllBehaviors];
    }
    
    @end
    
[/code]

タップにより、断続的にimageViewが移動することを、確認してください。  
UIDynamicsは、ほかに円運動もできますし、重力によってビューが落下することも実現できます。すこし勉強をする必要がありますが、それに振り向けた労力以上の効果を得ることができるはずです。

