我想用CGPathRef缩放和滚动UIScrollView。因此我假设我必须为UIScrollView的图层属性设置动画?但是,我将使用哪个属性设置动画,这相当于执行UIView动画并设置其contentOffset属性和zoomScale?
这些不是CALayer的属性。
关于我如何处理这个问题的任何想法?同样,只想将scrollview移动到某个contentOffset和zoomScale,但不一定是从A点到B点的线性移动,分别是缩放A到缩放B.
我在考虑使用CGPathRef的CAKeyFrameAnimation,但我不知道要设置动画的属性。
答案 0 :(得分:53)
您必须为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>; }
。
希望这有帮助。
答案 1 :(得分:0)
移动CALayer是通过(最好)设置它的.position属性 - 或者可能是anchorPoint(c.f。上的文档:http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html)完成的。
...但如果你正在使用UIScrollView,我认为你不想搞乱CALayer。您是否尝试将纯CoreAnimations应用于ScrollView?
(问题是:UIScrollView是在CALayer之上实现的 - 所以即使你今天可以破解它,它很可能在未来的iOS版本中破解。如果可能的话,你想要避免使用CALayer类)
答案 2 :(得分:0)
此示例基于pt2ph8的on_click() {
this.$emit('update:id', 1)
this.$emit('update:text', 'child text')
}
答案。
obj-c