2015-11-27 2 views
1

Мое приложение позволяет пользователю переключать UIImageView назад и вперед, а затем пользователь может захватить этот экран. Вот мой код для захвата экрана в UIImagerenderInContext не работает корректно при изменении положения слоя Z

-(UIImage *)imageWithView:(UIView *)view 
{ 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 2.0f); 

// I even tried view.layer.presentationLayer but still not working 
[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 


return image; 

} 

Я не использую [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES], потому что это медленнее, а иногда (если вид не виден) нарисованной скриншот в черном цвете.

Но проблема с renderInContext - это позиция Z, которая изменяется между UIImageView (imageView.layer.zPosition = 0.01;etc). На моем экране iPhone это работает правильно, когда я назначил значение zPosition, но на экране захвата получается неправильно.

В любом случае я могу решить эту проблему? Заранее спасибо

Отредактировано: Вот что я пытался сделать, прежде чем сделать снимок экрана. Я использую этот код, чтобы сделать один экран ImageView перед другим.

-(void)bringOneLevelUp:(UIImageView*)imageView 
{ 
//_imgArray is sorted by Z position order (small to big) 
    NSUInteger currentObjectIndex = [_imgArray indexOfObject:imageView]; 


if(currentObjectIndex+1< _imgArray.count){ 

UIImageView *upperImageView = [_imgArray objectAtIndex:currentObjectIndex+1]; 


    CGFloat currentZIndex = imageView.layer.zPosition; 
    CGFloat upperZIndex= upperImageView.layer.zPosition; 

    imageView.layer.zPosition = upperZIndex; 
    upperImageView.layer.zPosition = currentZIndex; 


// swap position in array 
[_imgArray exchangeObjectAtIndex:currentObjectIndex withObjectAtIndex:currentObjectIndex+1]; 

} 

}

И любил я объяснял ранее результат этого кода на экране телефона правильно. NewImageView находится перед lastImageView. Но когда я сделал снимок экрана renderInContext. Они не.

+0

Что означает «получается неправильно»? Какие значения z-позиции вы пытаетесь? – trojanfoe

+0

Я поменял позицию Z UIImageView. Он выглядит правильно на экране телефона, но не тогда, когда я попытался его захватить. –

+0

Я не совсем понимаю, что делает ваш код. Почему ты не показал это в своем вопросе? – trojanfoe

ответ

0

У меня была эта проблема. Я хотел, чтобы текст рисовал поверх изображения после использования renderInContext(). Я решил это, позиционируя свои взгляды, добавляя их в окно, а не используя слой, чтобы установить z-позицию.

Я использовал, чтобы иметь текстовое поле, которое будет устанавливать его Z-позицию вверх:

layer?.zPosition = 1 

Я удалил этот код и вместо этого, при добавлении моего изображения в окно, я использовал:

addSubview(image, positioned: .Below, relativeTo: nil) 

Это решило проблему.