Добавление и удаление представления изображения в подпредставлении окна - PullRequest
1 голос
/ 15 июля 2011

Я работаю с приложением iPhone (режим LandscapeRight), на первой странице я добавил представление изображений с именем imageView, но мне нужно снова удалить его на третьей и четвертой страницах. Пожалуйста, помните, что мне нужно добавить это изображение снова на пятой странице.

На первой странице я добавил изображение со следующим кодом:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg_logo_medium.png"]];
imageView.frame = CGRectMake(123, 200, 250, 66);
imageView.tag = 800;
imageView.transform = CGAffineTransformMakeRotation(M_PI / 2);
//imageView.window.
[self.parentViewController.view.window addSubview:imageView];
[imageView release];

Как это можно удалить и повторно добавить?

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Если вы хотите удалить imageView из его вызова суперпредставления:

[imageView removeFromSuperview];

имейте в виду, что imageView получает release при удалении, поэтому вы должны убедиться, что оно правильно retain ред, если вы планируете использовать его повторно.Другими словами, вам нужно будет добавить ivar в ваш класс контроллера, где вы можете сохранить imageView для повторного использования.На самом деле вы присваиваете его локальной переменной и в конце метода, который вы выпускаете;переменная должна быть не локальной, а иваром контроллера, чтобы иметь постоянство, и вам нужно будет освободить ее в dealloc.

РЕДАКТИРОВАНИЯ:

Я полагаю, что у вас естьUIViewController где-то, что может управлять добавлением и удалением подпредставлений по мере необходимости.

В этом классе (я не знаю, как его вызвать, потому что вы этого не сказали) я бы объявил члена для храненияподпредставление:

@interface MyViewController {
    ...
    UIImageView* imageView;
    ...
}
....
@end

Здесь реализация:

@implementation MyViewController;
...

-(void)viewDidLoad {
    [super viewDidLoad];
    ....
    [self createImageView];
    ....
}

- (void) createImageView {
  imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg_logo_medium.png"]];
  imageView.frame = CGRectMake(123, 200, 250, 66);
  imageView.tag = 800;
  imageView.transform = CGAffineTransformMakeRotation(M_PI / 2);
}

- (void)addImageView {
    [self.parentViewController.view.window addSubview:imageView];
}

- (void) removeImageView {
   [imageView removeFromSuperview];
}

-(void)dealloc {
    ...
    [imageView release];
    ...
}

Итак, в viewDidLoad вы создаете imageView и сохраняете его для последующего использования;Когда вам это нужно, вы добавляете его по телефону addImageView;когда вы закончите с этим, вы удалите его с помощью removeImageView.

Если ваш класс не является контроллером представления, вы сможете применить к нему те же самые изменения.

0 голосов
/ 15 июля 2011

Серхио совет хороший и правильный.Еще одна вещь, которую я бы добавил, это то, что в большинстве случаев у вас должно быть только одно подпредставление вашего окна.Это связано с тем, что окно координируется только с контроллером вида для самого последнего добавленного вида для управления автоповоротом.Цитирование из Руководства по программированию View Controller для iOS:

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

...