Перелистывание координат уровня NSViews (CALayer) - PullRequest
2 голосов
/ 04 марта 2009

Я сделал это в awakeFromNib:

drawLayer = [CALayer layer];
self.layer = drawLayer;
[self setWantsLayer:YES];

есть действие "add:"

// some  business logic

    [drawLayer addSublayer:layer];
    [self layout];

-(void)layout
while(pg = [pageEnumr nextObject])

    {
    //rect is calculated so that layers are added in order (left to right)
    [pg setFrame:rect];
    }

Я хочу, чтобы подслои были добавлены в верхнюю левую часть суперслоя (CALayer of view) но они добавляются снизу слева

Я попробовал affineTranform

   CGAffineTransform  trans = CGAffineTransformMake(1.0,0.0,0.0,-1.0,0.0,0.0);
   self.layer.affineTransform =    trans;

но прокрутка делает исчезновение моих подслоев

Я использовал преобразование

CATransform3D aTransform = CATransform3DIdentity;
aTransform = CATransform3DMakeRotation(M_PI, 1, 0, 0);  
self.layer..transform = aTransform; 

Мне нужно применить преобразование, чтобы противостоять повороту подслоев, и после добавления около 100 подслоев прокрутка замедляется, и приложение перестает отвечать на запросы

если я не применяю какое-либо преобразование (без аффинного или без преобразования), приложение выполняется быстро даже после добавления 1000 подслоев

Мое приложение должно содержать огромное количество слоев разного размера. помогите мне, как сделать так, чтобы слой хоста брал перевернутые координаты ...

1 Ответ

6 голосов
/ 04 марта 2009

Если вы хотите перевернуть координатное пространство вашего слоя, я считаю, что инверсия шкалы Y - лучший способ справиться с этим. Я сделал аналогичную вещь, чтобы инвертировать систему координат в iPhone другим способом (чтобы CALayer, размещенный в UIView, подчинялся системе координат Mac в кварце), используя следующий код:

self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);

Попробуйте использовать это или то же преобразование, примененное к свойству transform слоя. В моих тестах это никак не повлияло на производительность.

Если вы обнаружите, что вам нужно применить преобразование для противодействия переворачиванию для каждого из ваших слоев, а это производительность убийства, возможно, вам следует просто вручную вычислить правильную координату Y для размещения каждого из слоев. Это не так сложно сделать (я считаю, что self.layer.frame.size.height - y - newLayer.frame.size.height).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...