Как создавать динамические кнопки поверх динамических ImageViews, сохраняя уникальность - PullRequest
0 голосов
/ 31 октября 2011

Я использую проект 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, которое уникально для каждого изображения, но по-прежнему отображается на всех изображениях и не активируется: /

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

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

С уважением,

Вахиб

1 Ответ

2 голосов
/ 31 октября 2011

Вы должны создать дополнительный 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];

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

...