2009-03-04 2 views
1

Я сделал это в awakeFromNib:листать координаты слоя NSViews (CALayer)

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

есть «добавить:» Действие

// 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]; 
    } 

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

Я попытался 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 подслоев

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

ответ

5

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

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

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

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

+0

Не забудьте переместить начало координат, чтобы вы не просто ушли в отрицательное пространство. Переведите y по высоте слоя, затем масштабируйте, как вы показали. –

+0

С UIViews я обнаружил, что вам не нужно переводить в Y, когда вы применяете вышеуказанный subublTransform к размещенному уровню UIView. Когда я его читал, опорная точка по умолчанию для слоя является его центром, и именно об этом применяется преобразование. –

+0

Вы правы. Обычно вам нужен перевод Y. –

Смежные вопросы