0

を使用CABasicAnimationしてboundsプロパティを変更し、それを使用してレイヤーのpositionプロパティを変更しています。両方を同時に行うことは可能ですか?UIView?のフレームを変更するようなものです。

CGRect oldBounds = mask.bounds;
CGRect newBounds = CGRectMake(0,0, rect.size.width * scale, rect.size.height * scale);
NSLog(@"%@", NSStringFromCGRect(newBounds));
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"];

animation.fromValue = [NSValue valueWithCGRect:oldBounds];
animation.toValue = [NSValue valueWithCGRect:newBounds];

mask.bounds = newBounds;
[mask addAnimation:animation forKey:@"bounds"];



CGPoint oldPos = mask.position;
CGPoint newPos = CGPointMake(rect.origin.x * scale, rect.origin.y * scale);

CABasicAnimation *animation2 = [CABasicAnimation animationWithKeyPath:@"position"];

animation2.fromValue = [NSValue valueWithCGPoint:oldPos];
animation2.toValue = [NSValue valueWithCGPoint:newPos];

mask.position = newPos;
[mask addAnimation:animation2 forKey:@"position"];
4

1 に答える 1

0

編集:より正確なアニメーションを提供するように変更されました...

一度に2つのアニメーションを追加できます...

このような:

CALayer * myLayer ;

{
    CABasicAnimation * anim = [ CABasicAnimation animationWithKeyPath:@"position" ] ;
    anim.fromValue = [ NSValue valueWithCGPoint:layer.position ] ;
    [ layer addAnimation:anim forKey:nil ] ;
}

layer.position = <#newPosition#> ;

{
    CABasicAnimation * anim = [ CABasicAnimation animationWithKeyPath:@"bounds" ] ;
    anim.fromValue = [ NSValue valueWithCGRect:layer.bounds ] ;
    [ layer addAnimation:anim forKey:nil ] ;
}

layer.bounds = <#newBounds#> ;
于 2012-08-10T00:23:07.813 に答える