У меня проблема со следующим кодом.
Я хочу использовать один UIImageView для более чем 1 кнопки, мне кажется логичным определить UIImageView только один раз и использовать его столько раз, скольконеобходимо.
Если я пытаюсь прикрепить imgView1 к двум различным кнопкам, отображается только одна из них.
Я могу обойти это, используя закомментированное imgView2.
Но кажется глупым, что я должен сделать это.Почему я не могу просто иметь один UIImageView и затем добавить его в столько представлений, сколько мне нужно?
// This will not allow me to use imgView1 more than once and only one of the imgViews/buttons is displayed.
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"some_image" ofType:@"png"]];
UIImageView *imgView1 = [[UIImageView alloc] initWithImage:image];
//UIImageView *imgView2 = [[UIImageView alloc] initWithImage:image];
CGRect frame = CGRectMake(10, 10, 70, 72);
UIButton *h=[UIButton buttonWithType:UIButtonTypeCustom];
[h setFrame:frame];
[h insertSubview:imgView1 atIndex:1];
frame = CGRectMake(100, 10, 70, 72);
UIButton *h2=[UIButton buttonWithType:UIButtonTypeCustom];
[h2 setFrame:frame];
[h2 insertSubview:imgView1 atIndex:1];
[self.view addSubview:h];
[self.view addSubview:h2];
[imgView1 release];
//[imgView2 release];
Редактировать:
Контекст
Я добавил контекст к своему вопросу
Я пытаюсь создать изображение с градиентным фоновым слоем, которое находится за фактическим изображением, и является дополнительным вопросом к этому (URL: Создание кнопки прозрачного изображения с помощью bgcolor )
Хотя я могу просто использовать setImage, он не будет помещать слой градиентного фона в фон.
Например:
int fullFrameX = 25;
int extFrameX = fullFrameX + 3;
CGRect fullFrame;
CGRect frame;
fullFrame = CGRectMake(fullFrameX, 10, 70,72);
frame = CGRectMake(extFrameX, 13, 63,65);
UIButton *h=[UIButton buttonWithType:UIButtonTypeCustom];
[h setFrame:fullFrame];
[[h layer] setMasksToBounds:YES];
//[h setBackgroundImage:image forState:UIControlStateNormal];
[h setImage:image forState:UIControlStateNormal];
[h setShowsTouchWhenHighlighted:YES];
[h setClipsToBounds:YES];
CAGradientLayer *gradientLayer = [[CAGradientLayer alloc] init];
[gradientLayer setBounds:frame];
[gradientLayer setPosition:CGPointMake([h bounds].size.width/2, [h bounds].size.height/2)];
[gradientLayer setColors:[NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:255 green:0 blue:255 alpha:0]CGColor],(id)[[UIColor blackColor] CGColor], nil]];
[[h layer] insertSublayer:gradientLayer atIndex:1];
//[h insertSubview:imgView atIndex:1];
[h setTag:0];
[h addTarget:self action:@selector(btnSelectColor:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:h];
//[imgView release];
[gradientLayer release];
Это canabalised версия моего исходного кода (из предыдущего вопроса), для чего он ставит изображение на тот же уровень, что и мой градиентный фон.
В моем предыдущем вопросе я упоминалОтвет использования UIImageViews для выполнения большей части тяжелой работы, за исключением проблемы, с которой я сталкиваюсь, заключается в том, что мне нужно создать несколько UIImageViews, когда мне действительно нужно создать его один раз.
Идея состоит в том, чтобыбушельттоны, каждый из которых имеет цветной фон, из которого пользователь может щелкнуть, чтобы выбрать свою цветовую схему.
Это немного сложно объяснить, но я постараюсь разбить его на список.
- Изображение (аватар) является верхним слоем
- Градиентный фон находится на заднем плане и превращается в
frame
- Весь объект кликабелен
- Мне нужно только инициировать 1 UIImageView каждый раз, когда я хочу его использовать, но вынужден создавать несколько копий одного и того же UIImageView.
Надеюсь, это проясняет контекст моей проблемы.