2015-07-16 2 views
0

У меня есть UIView с различными CALayers разного размера.Захват снимка экрана с UIVIew с несколькими CALayers отображает белый фон при сохранении изображения в галерее

Когда я пытаюсь сохранить UIView, как изображение в галерею она теряет свою прозрачность:

Мой код:

- (UIImage *) imageWithView:(UIView *)view 
{ 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale); 
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

// Получение изображение

UIImage *img=[self imageWithView:MainView]; 
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 

Примечание: Когда я отлаживать код, отображает прозрачное изображение, но когда я вижу в галерее, он отображается с белым фоном

+0

Как установить прозрачность? – Indrajeet

+0

У меня есть UIView, у которых разные CALayers, размер каждого слоя различен. Например, размер слоя меньше размера MainView –

+1

NO problem, он будет показывать либо черный фон, либо белый фон, но на самом деле он является трансапарентом –

ответ

0

Я пробовал свой код. Вы можете попробовать следующее:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIView *tmpView = [UIView new]; 
    tmpView.frame = self.view.bounds; 
    tmpView.backgroundColor = [UIColor clearColor]; 
    [self.view addSubview:tmpView]; 

    UIImage *img = [self imageWithView:tmpView]; 
    [self saveInJPGFormat:img]; 
    [self saveInPNGFormat:img]; 
} 

- (void)saveInJPGFormat:(UIImage *)image { 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 
} 

- (void)saveInPNGFormat:(UIImage *)image { 
    NSData* imageData = UIImagePNGRepresentation(image); 
    UIImage* pngImage = [UIImage imageWithData:imageData]; 
    UIImageWriteToSavedPhotosAlbum(pngImage, nil, nil, nil); 
} 

- (UIImage *) imageWithView:(UIView *)view { 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale); 
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

Ваш метод сохраняет JPG в рулоне камеры. JPG не способны поддерживать альфа-канал. Второй метод, взятый из https://stackoverflow.com/a/10279075/849616, сохраняет изображение как PNG. Я могу открыть его, и я вижу изображение (альфа-канал сохраняется).

BTW: из этого очень грязный и быстрый код. В действительности вы должны сделать категорию на UIImage для этих методов. Также сохраняйте MVC и либо виды & слоев придерживаться раскадровки, либо разделять подкласс UIView.

Изображение из моей фотогалереи: CameraRoll экрана предварительного просмотра, так что вы будете уверены, что он пуст: enter image description here

Так метод работает.

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

  • Нет связанных вопросов^_^