25

CGPathRef を使用して UIScrollView をズームおよびスクロールしたい。そのため、UIScrollView のレイヤー プロパティをアニメーション化する必要があると思いますか? しかし、UIView アニメーションを実行し、その contentOffset プロパティと zoomScale を設定するのと同等にするために、どのプロパティをアニメーション化しますか?

これらは CALayer のプロパティではありません。

これにどのようにアプローチするかについてのアイデアはありますか? 繰り返しますが、スクロールビューを特定の contentOffset と zoomScale に移動したいだけですが、必ずしもポイント A からポイント B、ズーム A からズーム B にそれぞれ直線的に移動する必要はありません。

CGPathRef を使用した CAKeyFrameAnimation を考えていましたが、アニメーション化するプロパティがわかりません。

4

3 に答える 3

59

プロパティをアニメーション化する必要がありboundsます。実際、それはcontentOffsetプロパティが舞台裏で使用しているものです。

例:

CGRect bounds = scrollView.bounds;

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"];
animation.duration = 1.0;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

animation.fromValue = [NSValue valueWithCGRect:bounds];

bounds.origin.x += 200;

animation.toValue = [NSValue valueWithCGRect:bounds];

[scrollView.layer addAnimation:animation forKey:@"bounds"];

scrollView.bounds = bounds;

興味があれば、この情報を取得するために使用した方法は次のとおりです。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];

[scrollView setContentOffset:CGPointMake(200, 0) animated:NO];

[UIView commitAnimations];

NSLog(@"%@",scrollView);

NSLog呼び出しは次を出力します。

<UIScrollView: 0x860ba20; frame = (-65.5 0; 451 367); clipsToBounds = YES; autoresize = W+RM+TM+H; animations = { bounds=<CABasicAnimation: 0xec1e7c0>; }; layer = <CALayer: 0x860bbc0>; contentOffset: {246, 0}>

animationsスニペットには、アクティブなすべてのアニメーションが一覧表示されます。この場合は{ bounds=<CABasicAnimation: 0xec1e7c0>; }.

お役に立てれば。

于 2012-01-05T10:53:46.260 に答える
0

CALayerの移動は、(できれば).positionプロパティまたはおそらくanchorPointを設定することによって行われます(そのドキュメントを参照してください:http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CALayer_class/ Introduction / Introduction.html)。

...しかし、UIScrollViewを使用している場合は、CALayerをいじりたくないと思います。プレーンなCoreAnimationsをScrollViewに適用してみましたか?

(問題は、UIScrollViewがCALayerの上に実装されているため、今日ハックして動作させることができたとしても、将来のiOSバージョンで機能しなくなる可能性が非常に高いことです。可能であれば、その特定のクラスのCALayerを避けたいと思います)

于 2011-10-09T22:32:21.990 に答える