2012-04-05 2 views
1

Я пытаюсь нарисовать изображение на CALayer. Мне нужно только изображение, поэтому я создал свой позже следующим образом:Содержание содержимого CALayer слева внизу

CALayer *layer = [CALayer layer]; 

добавить мое изображение следующим образом:

NSImage *img = [[NSImage alloc] initWithContentsOfFile:@"path/to/img.png"]; 
[layer setContents:img]; 

Это работает, однако он рисует свои изображения, чтобы заполнить весь родительский фрейм (растяжение моего изображения в процессе).

Читая документы, я обнаружил следующее:

[layer setContentsGravity:@"kCAGravityBottomLeft"]; 

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

+0

Как насчет того, чтобы размер фрейма слоя соответствовал размерам изображения с указанием источника, который позиционирует его там, где вы хотите относительно представления? Повторите растягивание, проверьте UIView 'sizeToFit' и' sizeThatFits'. Но я не очень много работал с изображениями, так что это в основном догадки. – Wienke

+0

@Wienke попробовал это во-первых, и, похоже, он настаивает на том, чтобы оставаться в нижнем центре изображения. – Julio

ответ

0

Попробуйте это:

CALayer *layer = [CALayer layer]; 
layer.contentsGravity = kCAGravityBottomLeft; 
layer.contents = (id) aCGImageRef; 

Обратите внимание, что kCAGravityBottomLeft объявлен как NSString и contents недвижимости ожидает CGImageRef.

+0

Хотя это работает, это только выполнение того, что я уже сделал. В чем проблема. – Julio

+0

Итак, вы хотите, чтобы изображение рисовалось в границах _layer_ или в границах _superlayer_ слоя? Если последний, просто установите рамку слоя на границы своего суперслоя всякий раз, когда размер суперслоя изменяется. Это проще с помощью NSViews, потому что вы можете установить маску авторезистировки. – Costique

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