Как создавать динамические кнопки поверх динамических изображений, сохраняя уникальность

#iphone #ios #ipad #uiimageview #uibutton

#iPhone #iOS #iPad #uiimageview #uibutton

Вопрос:

Я использую проект PhotoScroller и хочу создавать кнопки поверх изображений программно. ImageView является подвидом ScrollerView. Мой фрагмент кода показан ниже:

 imageView = [[UIImageView alloc] initWithImage:image]; //initWithImage:image

//imageView.tag = i; // tag our images for later use when we place them in serial form
[imageView setContentMode:UIViewContentModeScaleToFill]; //though it has no impact
imageView.userInteractionEnabled = YES; //to enable touch interaction with image

[self addSubview:imageView];

UIButton *btn = [[UIButton buttonWithType:UIButtonTypeContactAdd] retain]; //Plus icon   button

btn.frame = CGRectMake(215, 550, 100, 100);
[btn addTarget:self action:@selector(onClickHotSpotButton)           forControlEvents:UIControlEventTouchUpInside]; //it wasnt working

[self addSubview:btn]; //Buttons are clickable but shows button on all images**

//[imageView addSubview:btn]; //Buttons are not clickable and are shown on all images
 

Теперь у меня есть два варианта. Делаю ли я свою кнопку подвидом ImageView или ScrollView, который является родительским для ImageView. Если я создам подраздел кнопки Scrollview, например [self addSubview:btn]; он отображается в правильном положении и доступен для просмотра, но проблема в том, что он создается на всех изображениях в очереди, потому что я делаю его подразделом родительского представления, т.е. scrollview . Иначе, если я сделаю это подвидом дочернего представления, т.Е. ImageView, который уникален для каждого изображения, но все равно отображается на всех изображениях и не доступен для просмотра :/

Может ли any1 подсказать мне, как сделать его интерактивным и сохранить связь между динамической кнопкой и уникальным изображением, чтобы у меня были разные кнопки в разных положениях на каждом изображении в очереди.

Заранее спасибо.

С уважением,

вахиб

Ответ №1:

Вам необходимо создать дополнительный UIView, содержащий как UIImageView, так и UIButton

 UIView* imageContainer = [[UIView alloc] initWithFrame:CGRectMake(0,0,1000,1000)] autorelease];
UIImageView* imageView = [[[UIImageView alloc] initWithImage:image] autorelease];

[imageView setContentMode:UIViewContentModeScaleToFill]; //though it has no impact
imageView.userInteractionEnabled = YES; //to enable touch interaction with image

[imageContainer addSubview:imageView];

UIButton *btn = [[UIButton buttonWithType:UIButtonTypeContactAdd] retain]; //Plus icon   button

btn.frame = CGRectMake(215, 550, 100, 100);
[btn addTarget:self action:@selector(onClickHotSpotButton) forControlEvents:UIControlEventTouchUpInside]; //it wasnt working

[imageContainer addSubview:btn];
[self addSubview:imageContainer];
 

Осторожно с утечкой памяти. В вашем коде много неиспользуемого содержимого.