也许是因为太晚了。不管是什么原因,我都不明白为什么我在尝试一个简单的csscrollayer示例时遇到麻烦。我将一个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];
}
滚动层显示,图标是重复的层我有一个边界周围的屏幕边缘。一切都很可爱,除了我不能滚动图标。我试过设置/不设置滚动模式。我试过用一个从屏幕上掉下来的拉伸图标。我什么都试过了。我做错什么了?
最佳答案
cascrollllayer没有插入uievent链,因此需要手动添加代码来修改触摸事件的滚动偏移量。像uiscrollview那样获得滚动的动量也是非常困难的。我强烈建议使用uiscrollview重新实现——它将非常简单。唯一的另一个选择是手动触摸事件处理,这是痛苦的!我试着用cascrollllayer获得一个不错的滚动条,但是在手动实现了一些笨拙的滚动行为之后就放弃了。
使用calayer或uiview的一般规则是在不需要任何用户交互时使用calayer对象。如果用户要触摸它,请使用uiview,它是一个非常轻量级的对象,因此开销可以忽略不计。
也就是说,我发现cascrolllayer非常无用!为什么不使用一个calayer并修改边界呢?它可能有一些用处,但它不能替代uiscrollview。