Как изменить размер содержимого CCScrollLayer? (класс расширения cocos2d) - PullRequest
4 голосов
/ 04 ноября 2011

В настоящее время я использую класс CCScrollLayer (в классах расширения cocos2d) для реализации системы меню.Он отлично работает, но мне бы хотелось, чтобы на экране были другие кнопки, а область прокрутки по умолчанию - весь экран.

Я попытался поиграть с размером контента, но без кубиков.После некоторого чтения я обнаружил, что размер содержимого установлен на размер экрана для поведения CCLayers.Пользователь предложил обернуть его в CCNode и масштабировать, но это не помогло.

Есть предложения или пример кода?Я бы подумал, что это возможно.

Ответы [ 3 ]

0 голосов
/ 04 ноября 2011

Хотя я использую табличное представление, а не представление с прокруткой, оба имеют одного и того же родителя [представление с прокруткой, дох]. Вы включили clipToBounds после установки размера контента?

Я бы порекомендовал использовать этот конструктор:

/**
 * Init this object with a given size to clip its content.
 *
 * @param size view size
 * @return initialized scroll view object
 */
- (id)initWithViewSize:(CGSize)size;
0 голосов
/ 27 мая 2012

Спасибо всем за помощь, к сожалению, кажется, что вы не можете изменить размер CCLayer (или contentSize не влияет на сенсорные события) без переписывания большого количества кода.

Однако я нашел обходной путь, который, кажется, работает. В событиях ccTouch, которые начинаются и перемещаются, я проверяю желаемые границы после преобразования UITouch в пространство cocos2D. Если они не в моих границах, я возвращаюсь, и в случае перемещения я вручную вызываю TouchEnded. TouchEnded также проверяет начальную точку касания, и если она выходит за границы, она игнорирует ее.

Кажется, все работает как надо. Я опубликую больше информации, если найду ее. Еще раз спасибо всем.

0 голосов
/ 04 ноября 2011

CAScrollLayer на удивление просто, что может сбивать с толку.

Просто добавьте к нему слой контента:

[_scrollLayer addSublayer:_contentLayer];

Чтобы установить прямоугольник, который вы хотите видеть на экранеустановить границы или рамку слоя прокрутки:

[_scrollLayer setBounds:visibleBounds];

Установить размер содержимого соответственно.Размер содержимого может быть больше или меньше, это не имеет значения.

[_contentLayer setBounds:currentContextBounds];

Если содержимое больше и вы хотите перейти к определенной точке, используйте scrollToPoint: или scrollToRect: методы слоя прокрутки.

При желании необходимо реализовать собственные индикаторы прокрутки, полосы и т. Д.

...