私はIOSアプリを構築しています。
次のコアアニメーションを実行しようとしています
テキスト 1 が中央に表示されます 次に、テキスト 2 を左から右に移動してテキスト 1 を置換し、テキスト 3 を左から右に移動してテキスト 2 を置換し、テキスト 4 を左から右に移動してテキストを置換し、テキスト 2 に置換します3.
各テキストは、基本的にテキスト 1、2、3 を置換するために飛び込みます。したがって、各テキストは前のテキストを置換するために突入します。どうすればこれを達成できますか?
私はIOSアプリを構築しています。
次のコアアニメーションを実行しようとしています
テキスト 1 が中央に表示されます 次に、テキスト 2 を左から右に移動してテキスト 1 を置換し、テキスト 3 を左から右に移動してテキスト 2 を置換し、テキスト 4 を左から右に移動してテキストを置換し、テキスト 2 に置換します3.
各テキストは、基本的にテキスト 1、2、3 を置換するために飛び込みます。したがって、各テキストは前のテキストを置換するために突入します。どうすればこれを達成できますか?
UILabelsとCATextLayersのどちらを使用しているかについては言及していません。CATextLayersを使用してこれを行う1つの方法は次のとおりです。
まず、アニメーション化するレイヤーを作成し、レイヤーツリーに追加します。私はviewDidLoadでそれをしました:
- (void)viewDidLoad
{
[super viewDidLoad];
_strings = @[@"Hello world", @"Goodbye cruel world", @"Hello again", @"And again, goodbye!"];
_textLayer = [CATextLayer layer];
[_textLayer setString:[_strings objectAtIndex:0]];
[_textLayer setBounds:CGRectMake(0.0f, 0.0f, 400.0f, 50.0f)];
[_textLayer setPosition:[[self view] center]];
[_textLayer setForegroundColor:[[UIColor orangeColor] CGColor]];
[_textLayer setAlignmentMode:kCAAlignmentCenter];
[[[self view] layer] addSublayer:_textLayer];
}
次に、ボタンをこのコンセントに接続します。テキストレイヤーの「文字列」プロパティを変更するたびに、左から右へのプッシュアニメーションが表示されます。
- (IBAction)didTapChangeText:(id)sender
{
NSInteger index = arc4random() % [_strings count];
CATransition *transition = [CATransition animation];
[transition setType:kCATransitionPush];
[transition setSubtype:kCATransitionFromLeft];
// Tell Core Animation which property you want to use the
// transition animation for. In this case 'string'
[_textLayer addAnimation:transition forKey:@"string"];
// Trigger the animation by setting the string property
[_textLayer setString:[_strings objectAtIndex:index]];
}
あなたが説明したことから、これはあなたが探しているものをあなたに与えるはずです。
こんにちは、UIView の animateWithDuration:delay:options:animations:completion メソッドを使用して、これらのアニメーションを実行できます。それらを補完ブロック内にネストして、それらを連鎖させます。ただし、iOS 3.2 以降専用だと思います。
UILabel *labelText2; // Can be set up in Interface Builder, linked as IBOutlet
CGRect rectLabel2 = labelText2.frame;
rectLabel2.center = labelText2.superview.center;
[UIView animateWithDuration:1.0f delay:0.0f options:nil animations:^(){
labelText2.frame = rectLabel2; // Animates labelText2 to the center of its container view
} completion:^(BOOL finished) {
// Continue with other animation using another UIView animateWithDuration block...
UILabel *labelText3; // Setup in Interface Builder on the left outside of the container view
CGrect rectLabel3 = labelText3.frame;
rectLabel3.center = labelText3.superview.center;
[UIView animateWithDuration:1.0f delay:0.0f options:nil animations:^(){
labelText3.frame = rectLabel3;
} completion:^(BOOL finishedInside) {
// Nest in Label4, Label5 etc...
}];
}];