也许是因为它已经晚了。无论是什么原因,我无法弄清楚为什么我遇到一个简单的CSScrollLayer示例我正在尝试。我将一个50像素的Eclipse图标添加到基于视图的项目和我的initialize方法中(从initWithNibName:bundle :)调用我有这个:
-(void) initialize
{
CAScrollLayer *scrollLayer = [CAScrollLayer layer];
scrollLayer.backgroundColor = [[UIColor blackColor] CGColor];
CGRect bounds = self.view.bounds;
scrollLayer.bounds = CGRectMake(0, 0, bounds.size.width, bounds.size.height);
scrollLayer.contentsRect = CGRectMake(0, 0, bounds.size.width + 800, bounds.size.height + 800);
scrollLayer.borderWidth = 2.5;
scrollLayer.borderColor = [[UIColor redColor] CGColor];
scrollLayer.position = CGPointMake(self.view.center.x, self.view.center.y - 20);
scrollLayer.scrollMode = kCAScrollBoth;
[self.view.layer addSublayer:scrollLayer];
UIImage *image = [UIImage imageNamed:@"eclipse32.gif"];
for(int i=0; i<6; i++) {
layer = [CALayer layer];
layer.backgroundColor = [[UIColor blackColor] CGColor];
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.contents = (id)[image CGImage];
layer.position = CGPointMake(layer.bounds.size.width * i, self.view.center.y);
[scrollLayer addSublayer:layer];
}
// [button removeFromSuperview];
// [self.view addSubview:button];
// self.view.userInteractionEnabled = YES;
[image release];
}
滚动图层显示,图标在图层上重复我有一个围绕屏幕边缘的边框。一切都很可爱,除了我不能滚动图标。我试过/没有设置滚动模式。我尝试过一个从屏幕上掉下来的拉伸图标。我已经尝试了一切。我做错了什么?
答案 0 :(得分:4)
CAScrollLayer未插入UIEvent链,因此您需要手动添加代码以修改触摸事件的滚动偏移。像UIScrollView那样获得滚动动量也很棘手。我强烈建议使用UIScrollView重新实现 - 它会非常简单。唯一的另一种选择是手动触摸事件处理,这很痛苦!我尝试使用CAScrollLayer获得一个不错的滚动条,并在手动实现一些笨拙的滚动行为后放弃了。
我使用CALayer或UIView的一般规则是在不需要任何用户交互时使用CALayer对象。如果用户要触摸它,使用UIView,它是一个非常轻量级的对象,因此开销可以忽略不计。
那就是说,我发现CAScrollLayer非常无用!为什么不使用CALayer并修改边界?可能有一些用处,但它不能代替UIScrollView。
答案 1 :(得分:0)
尝试将此添加到您的示例中以编程方式滚动图层:
- (void)scroll {
[scrollLayer scrollToPoint:scrollPoint];
scrollPoint.x += 10;
[self performSelector:_cmd withObject:nil afterDelay:0.1];
}
并在initialize方法的末尾添加:
scrollPoint = CGPointMake(0, 0);
[self scroll];