Мое приложение позволяет пользователю переключать UIImageView
назад и вперед, а затем пользователь может захватить этот экран. Вот мой код для захвата экрана в UIImage
renderInContext не работает корректно при изменении положения слоя 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. Они не.
Что означает «получается неправильно»? Какие значения z-позиции вы пытаетесь? – trojanfoe
Я поменял позицию Z UIImageView. Он выглядит правильно на экране телефона, но не тогда, когда я попытался его захватить. –
Я не совсем понимаю, что делает ваш код. Почему ты не показал это в своем вопросе? – trojanfoe