也许是因为太晚了。不管是什么原因,我都不明白为什么我在尝试一个简单的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。

10-07 19:14
查看更多