Свести UIViews Subviews для UIImage iPhone 3.0 - PullRequest
6 голосов
/ 15 сентября 2009

У меня есть UIView, который имеет несколько UIImageViews в качестве подпредставлений. К каждому из этих подпредставлений применялись различные аффинные преобразования. Я хотел бы взять то, что составляет снимок экрана моего UIView, захватывая его как UIImage или какое-то другое представление изображения.

Метод, который я уже пробовал, рендеринг слоев в CGContext с помощью:

[view.layer renderInContext:UIGraphicsGetCurrentContext()];

не сохраняет позиционирование или другие аффинные преобразования моих подпредставлений.

Я был бы очень признателен за удар в правильном направлении.

Ответы [ 2 ]

11 голосов
/ 15 сентября 2009

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

UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
0 голосов
/ 01 апреля 2016

Вот версия Swift 2.x:

// This flattens <allViews> into single UIImage
func flattenViews(allViews: [UIView]) -> UIImage? {
    // Return nil if <allViews> empty
    if (allViews.isEmpty) {
        return nil
    }

    // If here, compose image out of views in <allViews>
    // Create graphics context
    UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, UIScreen.mainScreen().scale)
    let context = UIGraphicsGetCurrentContext()
    CGContextSetInterpolationQuality(context, CGInterpolationQuality.High)

    // Draw each view into context
    for curView in allViews {
        curView.drawViewHierarchyInRect(curView.frame, afterScreenUpdates: false)
    }

    // Extract image & end context
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    // Return image
    return image
}
...