アニメーションUILabelフェードイン/アウト
-
27-09-2019 - |
質問
私は、RSSフィードの配列で終わるつもりですし、ビューの下部にそれらを表示するラベルまたはそのようないくつかをしたいと思います。私は、アレイ内の各フィードを通じてアニメーションしたいと思います。
このiはフェードのために働く、アニメイト、これまでに持っているものであるが、唯一の配列の最後の項目をアニメーション化します。
feed = [[UILabel alloc] initWithFrame:CGRectMake(0,380,320,43)];
[self.view addSubview:feed];
feed.alpha=1;
NSArray *feeds = [NSArray arrayWithObjects:[NSString stringWithFormat:@"1234567"],[NSString stringWithFormat:@"qwerty"],[NSString stringWithFormat:@"asdfgh"],nil];
for (NSString* f in feeds){
feed.text=f;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:2.0f];
feed.alpha=0;
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
}
イム必ずそのシンプルます。
おかげ
解決
まずあなたが本当により良い命名規則を考慮する必要がありますオフ。あなたが戻って来ているし、あなたのコードを見たときに、のフィードUILabelを呼び出すは、将来のために非常に有用ではありません。私はのfeedLabel のを名前を付けます。フィードのあなたのリストをするときに反復次に、あなただけのfor (NSString *feed in feeds)
ことができますし、それがより多くの意味を行います。そしてそうfeedLabel.text = feed;
されます。
とにかく、私はあなたのコードで参照の問題は、あなたが繰り返しあなたのループ内でゼロにアルファを設定しているが、あなたは1に戻って、それを設定したことがないということです。言い換えれば、あなたはアルファ値に変更を行っていません。これは、反復ごとに同じままです。
だから、多分あなたは、あなたが何をしようとして明確にできました。あなたがテキストの変化の間のテキストをフェードしたい場合は、別のアニメーションや方法論が必要になります。代わりにループの、あなたのアニメーションをチェーンなど、あなたのdidStopSelectorは、あなたがテキストを設定し、次のいずれかを起動するときに。ような何かます:
- (void)performAnimation;
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:2.0f];
feed.alpha=0;
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];
[UIView commitAnimations];
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
feed.alpha = 1.0;
NSString *nextFeed = [self getNextFeed]; // Need to implement getNextFeed
if (nextFeed)
{
// Only continue if there is a next feed.
[feed setText:nextFeed];
[self performAnimation];
}
}
他のヒント
私はそれが最初のフィードにフェードアウトしますが、それはanimationDidStopイベントを入力していない、あなたのコードを試してみました。ザッツなぜそれが再びperformAnimationを呼び出し傾けます。アニメーションのための任意のセット(デリゲートまたはプロトコルなど。)
があります