изменение свойства границ UIView в iOS, затем рендеринг изображения

#iphone #ios #render #layer #bounds

#iPhone #iOS #рендеринг #слой #границы

Вопрос:

В моем приложении:

  • У меня есть представление (UIView * MyView) с clipsToBound = YES;
  • У меня есть кнопка для изменения свойства origin of bounds:
 CGRect newRect = myView.bounds;
newRect.origin.x  = 100;
myView.bounds = newRect;
myView.layer.frame = newRect;
 
  • Затем я получаю изображение из представления:
 UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage_after = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage_after, nil, nil, nil);
 

Он создает изображение, которого я не ожидал. Мне нужно изображение, которое я вижу на экране iPhone.

Ссылка на код здесь: http://www.mediafire.com/?ufr1q8lbd434wu1

Пожалуйста, помогите мне!

Комментарии:

1. Я не думаю, что MyView.layer.frame = newRect; необходим, попробуйте удалить его.

2. Дорогой, перемещение не решает проблему.

Ответ №1:

Вы не хотите отображать само изображение в своем контексте — оно всегда будет отображаться одинаково (вы не изменяете изображение, вы просто перемещаете его вверх по экрану).

Вы хотите отобразить родительский вид изображения следующим образом :

 UIGraphicsBeginImageContext(myView.superview.bounds.size);
[myView.superview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage_after = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage_after, nil, nil, nil);
 

Редактировать

Однако вы можете не захотеть отображать все в своем супервизоре 🙂

Ваши представления могут выглядеть примерно так

 MainView
   ImageView (myView)
   UIButton (ok button)
   UIButton (cancel button)
 

Здесь рендеринг супервизора вашего изображения будет отображать MainView, включая кнопки!

Вам нужно добавить еще одно представление в свою иерархию следующим образом :

 MainView
  UIView (enpty uiview)
    ImageView (myView)
  UIButton (ok button)
  UIButton (cancel button)
 

Теперь, когда вы визуализируете супервизор вашего изображения, внутри него есть только изображение — кнопки не отображаются 🙂

Комментарии:

1. Уважаемый декан Омбурн. Ваше решение отлично работает, оно отображает изображение как вид, отображаемый на экране. Но я хочу отображать только MyView, а не SuperView. Есть ли какой-нибудь способ?

2. Ссылка на мой оригинальный неожиданный код здесь: mediafire.com/?ufr1q8lbd434wu1

3. Вам нужно добавить еще одно представление в свою иерархию — взгляните на мое редактирование для получения более подробной информации.