a) 私のアドバイスは、iOS 4 で導入された UIViewAnimationWithBlocks を使用することです。ブロックをしっかりと把握している場合、それらは非常に便利です。以下は、説明のためにわずか 5 分で作成した例です。
typedef void(^FadeInOutBlock)(void);
@interface PMViewController ()
@property (nonatomic, copy) FadeInOutBlock fadeInOutBlock;
@end
ここで typedef を宣言して、ブロック構文を最初からやり直さないようにします。アニメーション ブロックを保持するプロパティも作成します。
@implementation PMViewController
@synthesize myView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
__block PMViewController *_self = self;
self.fadeInOutBlock = ^{
[UIView animateWithDuration:0.5f animations:^{
// fade out effect
_self.myView.alpha = 0.0f;
} completion:^(BOOL success){
[UIView animateWithDuration:0.5f animations:^{
// fade in effect
_self.myView.alpha = 1.0f;
} completion:^(BOOL success){
// recursively fire a new animation
if (_self.fadeInOutBlock)
_self.fadeInOutBlock();
}];
}];
};
}
アニメーション内でアニメーションを作成します。myView のアルファが 0.5f 秒で 0.0f に減少するフェードアウトから始めます。完了すると、2 番目のアニメーションが起動され、myView のアルファが 1.0f に戻され、最後に最初のアニメーションが再び起動されます。(アニメセプション)
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.fadeInOutBlock)
self.fadeInOutBlock();
}
@end
そして最後に、あなたが初めてそれを発射したように見えました。
b)
さて、あなたが言及したきらめくアニメーションについては、各三角形を独自の UIView に分離し、上記の手法を使用して、異なる期間とアルファを使用することをお勧めします。
小さな UIView が多数ある場合は、(addSubview メソッドを使用して) 大きな UIView にグループ化し、それらの「コンテナ」UIView にアニメーションを適用します。
たとえば、4 つの個別の UIView コンテナーを作成し、それらのコンテナーの子として個別の UIView を多数持つことができます。次に、コンテナごとに 1 つずつ、合計 4 つのブロック アニメーションを作成し、それらにアニメーションを適用できます。それを試してみると、かなり良い効果を生み出すことができるでしょう。