2012-06-15 4 views
3

Я пытаюсь создать изображение UIView с CALayer подслоями. С помощью этого кодаUIGraphicsGetImageFromCurrentImageContext с CALayers

- (UIImage*)snapshot{ 
    UIGraphicsBeginImageContext(self.bounds.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return viewImage; 
} 

Я получаю изображение, но оно не точно отражает то, что отображается на экране. В частности, он не учитывает свойство маски CAShapeLayer. Мои закругленные углы не отображаются на изображении.

Вот сравнение того, как на экране появится пример того, как она предстает в образе: enter image description here

Просто чтобы прояснить, то изображение справа находится в том же положении, как старый объект, в основном растеризуя объект. Вот почему есть один и тот же фон; он не является частью объекта, который я захватываю.

Как я могу захватить изображение объекта, сохраняя маску CAShapeLayer на изображении?

EDIT: Кажется, что это была маска слоя, а не путь.

ответ

1

Вместо использования self.bounds.size и self.layer просто используйте этот вид, угол которого закруглен. предположим, если это imageView то

- (UIImage*)snapshot 
{ 
    UIGraphicsBeginImageContext(imageview.size); 
    [imageview.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return viewImage; 
} 
+0

Этот вид содержит множество подклассов UIButtons в качестве подзонов. Эти объекты подкласса UIButton содержат несколько CAShapelayers в качестве подслоев. Именно эти CAShapeLayers содержат закругленные углы. Как я мог сделать это, не забирая каждый CALayer как отдельный образ? – jadengeller

+0

Это действительно не отвечает на вопрос. – jadengeller

1

Прямо из ссылки CALayer Класс:

Кроме того, слои, ... указать backgroundFilters, фильтры, compositingFilter или маски значения ... не отображаются.

Я использую маску, а не CGPath. (Ну, CALayer с дорогой - моя маска, но все же.)

Другая проблема, однако, я не могу переключиться на использование пути вместо маски, потому что я использую градиенты, а CAGradientLayer не имеет пути как CAShapeLayer, поэтому я использовал маску.

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