iPhone: Как сохранить вид как изображение ??? (ex.save, что вы рисуете) - PullRequest
9 голосов
/ 21 мая 2011

Я нашел образец, который научит вас рисовать на iPhone

но там не сказано, как сохранить вид как изображение?

У кого-нибудь есть идеи ???

Или любой образец будет полезен:)

На самом деле, я пытаюсь сохранить подпись пользователя в виде изображения и загрузить его на сервер.

Спасибо

Уэббер

Ответы [ 3 ]

33 голосов
/ 21 мая 2011
UIView *view = // your view    
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Это дает изображение, которое вы можете сохранить с помощью -

NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
[imageData writeToFile:path atomically:YES];

где путь - это местоположение, в которое вы хотите сохранить.

4 голосов
/ 28 июля 2014

Вот быстрый способ визуализации любого UIView как изображения. Он учитывает версию iOS, на которой работает устройство, и использует соответствующий метод для получения представления изображения UIView.

Точнее говоря, теперь есть лучший метод (например, drawViewHierarchyInRect: afterScreenUpdates :) для создания снимка экрана UIView на устройствах под управлением iOS 7 или более поздних версий, который, как я уже читал, считается более эффективный способ по сравнению с методом renderInContext.

Подробнее здесь: https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW217

ПРИМЕР ИСПОЛЬЗОВАНИЯ:

#import <QuartzCore/QuartzCore.h> // don't forget to import this framework in file header.

UIImage* screenshotImage = [self imageFromView:self.view]; //or any view that you want to render as an image.

КОД:

#define IS_OS_7_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

- (UIImage*)imageFromView:(UIView*)view {

    CGFloat scale = [UIScreen mainScreen].scale;
    UIImage *image;

    if (IS_OS_7_OR_LATER) {
        //Optimized/fast method for rendering a UIView as image on iOS 7 and later versions.
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, scale);
        [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
        image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    } else {
        //For devices running on earlier iOS versions.
        UIGraphicsBeginImageContextWithOptions(view.bounds.size,YES, scale);
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
        image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    return image;
}
1 голос
/ 24 января 2013

В MonoTouch / C # в качестве метода расширения:

public static UIImage ToImage(this UIView view) {
    try {
        UIGraphics.BeginImageContext(view.ViewForBaselineLayout.Bounds.Size);
        view.Layer.RenderInContext(UIGraphics.GetCurrentContext());
        return UIGraphics.GetImageFromCurrentImageContext();
    } finally {
        UIGraphics.EndImageContext();
    }
}
...