CAScrollLayer не прокручивает! - PullRequest
       16

CAScrollLayer не прокручивает!

3 голосов
/ 25 февраля 2010

Может быть, потому что уже поздно. Безотносительно причины я не могу понять, почему у меня проблемы с простым примером CSScrollLayer, который я пытаюсь. Я добавляю 50-пиксельный значок Eclipse в проект, основанный на представлении, и в моем методе инициализации (вызываемом из 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];
}

Слой прокрутки показывает, значок повторяется на слое, у меня есть граница по краю экрана. Все прекрасно, но я не могу прокрутить иконки. Я пробовал с / без настройки режима прокрутки. Я пробовал с одной растянутой иконкой, которая падает с экрана. Я перепробовал все. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 28 апреля 2010

CAScrollLayer не подключается к цепочке UIEvent, поэтому вам нужно вручную добавить код для изменения смещений прокрутки при сенсорных событиях. Также очень сложно получить импульс прокрутки, как это делает UIScrollView. Я настоятельно рекомендую повторно реализовать с UIScrollView - это будет значительно проще. Единственный другой вариант - это ручная сенсорная обработка событий, что больно! Я попытался получить хороший скроллер с помощью CAScrollLayer и сдался после реализации нескольких неудобных способов прокрутки вручную.

Общее правило, которое я соблюдаю при использовании CALayer или UIView, - это использование объектов CALayer, когда мне не нужно никакого взаимодействия с пользователем. Если пользователь собирается прикоснуться к нему, используйте UIView, это очень легкий объект, поэтому накладные расходы незначительны.

Тем не менее, я нашел CAScrollLayer удивительно бесполезным! Почему бы просто не использовать CALayer и изменить границы? Вероятно, есть какая-то польза от этого, но он не заменит UIScrollView.

0 голосов
/ 22 апреля 2013

Попробуйте добавить это к своему примеру, чтобы прокрутить слой программно:

- (void)scroll {
[scrollLayer scrollToPoint:scrollPoint];
scrollPoint.x += 10;
[self performSelector:_cmd withObject:nil afterDelay:0.1];
}

и добавьте это в конце метода инициализации:

scrollPoint = CGPointMake(0, 0);
[self scroll];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...