このところ、開発スピードが落ちてしまい、さらに、Xcode的に使った事の無い処理を使う事が無い作業が続いてしまったため、処理無いように関する記事を書く事が出来なかった。
次のアプリ開発で、今までと少し違った事を始めたので、久々に開発に関する記事を書いてみる。
今回は、アニメーション処理。
Xcodeでアニメーション表示を行う場合、いくつかの方法があるのだが、初めなので最も簡単な方法で実装を進めている。
UIViewに対して「animateWithDuration」を使う事で、かなり簡単に画像を動かす事が出来た。
-(void)sample
{
self.view.frame = CGRectMake(start_positionX,start_positionY,start_sizeX,start_sizeY);
[UIView animateWithDuration:1.0f
delay:0.0f
options:UIViewAnimationOptionCurveEaseIn
animations:^{
// アニメーションをする処理
self.view.frame = CGRectMake(positionX, positionY, sizeX, sizeY);
}
completion:^(BOOL finished){
// アニメーションが終わった後実行する処理
[self smile2];
}];
}
たったこれだけで、画像の移動、拡大縮小、さらに、その連続ができる。
(上記の例では、アニメション完了後「sample2」が処理される。)
同様に、「view.transform = CGAffineTransformMakeRotation(M_PI);」を指定する事で回転も簡単にできる。
パラメータも比較的単純で、始めから、「アニメーション時間」、「動作開始までの時間」、「動作のパターン」のみの指定となる。
この中の、「options」が、パターンがあまり多くなく、思い通りに動かすには少し苦労する。
パターンとしては、「一定速度」、「だんだん早く」、「だんだん遅く」、「早くなってから遅くなる」の4種類。
これだけしかないので、この中で組み合わせて使うしか無い。
自分は、タイマを併用し、タイミングを計って、別々のアニメーションしているViewを入れ替える事である程度思い通りに動かす事が出来た。
ただ、タイミング的に、なかなかシビアなので、実際にリリースできるものにするまでまだまだ検証が必要。
ここで、さらに思ったのが、何らかの操作を行った場合、その時点でアニメーション動作を止める、又は、動きをかえる事が出来るのか?だった。
いろいろ考えたが結局、止める為の処理を別に組み込む必要があるようだ。
具体的には、以下のように実装した。
BOOL stop_flg;
-(void)sample
{
stop_flg = NO;
self.view.frame = CGRectMake(positionX, positionY, sizeX, sizeY);
[self move];
}
-(void)move
{
if(stop_flg == YES)return;
[UIView animateWithDuration:1.0f
delay:0.0f
options:UIViewAnimationOptionCurveEaseIn
animations:^{
// アニメーションをする処理
self.view.frame = CGRectMake(positionX+X, positionY+Y, sizeX, sizeY);
}
completion:^(BOOL finished){
// アニメーションが終わった後実行する処理
[self move];
}];
}
-(void)stop
{
stop_flg = YES;
}
見て分かるとは思うが、細かい動きの連続で、それぞれの動作の開始前(後でもよい)に停止すべきかの判断を行う。
上記の場合、ボタン等から「stop」をコールするだけとなる。
これらの処理の組み合わせだけで、意外と思い通りに動かす事が出来る。
[0回]
PR