Как я могу контролировать размер CCScrollView?

При использовании CCScrollView я хотел бы иметь возможность ограничить видимую область определенной ограничивающей рамкой. Как этого достичь?

Установка размера контента не влияет на видимую область.

1 ответ

Решение

Итак, я нашел то, что кажется разумным способом сделать это. На форуме cocos2d был некоторый код для отсечения области с помощью GL_SCISSOR:

http://forum.cocos2d-swift.org/t/cocos2d-3-1-beta-gl-scissor-test/13608/4

-(void)visit:(CCRenderer *)renderer parentTransform:(const GLKMatrix4 *)parentTransform
{
    CGPoint positionInWorldCoords = [self convertToWorldSpace:ccp(0, 0)];
    CGFloat contentScaleFactor = [[CCDirector sharedDirector] contentScaleFactor];

    positionInWorldCoords = ccpMult(positionInWorldCoords, contentScaleFactor);


    [renderer enqueueBlock:^{
        glEnable(GL_SCISSOR_TEST);
        glScissor(positionInWorldCoords.x, positionInWorldCoords.y, self.contentSize.width * contentScaleFactor, self.contentSize.height * contentScaleFactor);
} globalSortOrder:0 debugLabel:nil threadSafe:YES];

    [super visit:renderer parentTransform:parentTransform];

    [renderer enqueueBlock:^{
        glDisable(GL_SCISSOR_TEST);
    } globalSortOrder:0 debugLabel:nil threadSafe:YES];
}

Так что я подкласс CCScrollView и добавил этот метод. В итоге мне пришлось немного подправить координаты, чтобы получить правильную область отсечения. Похоже, неуклюжий ответ, поэтому я надеюсь, что у кого-то есть лучший ответ.

Другие вопросы по тегам