У меня есть какой-то слайдер изображения, чтобы показать некоторые рекламные изображения («промо»). Я использовал фрагмент, который я нашел где-то здесь. Он работает, заполняя scrollView с помощью UIImageViews фреймами и использует методы UIScrollViewDelegate и методы PageControl для перемещения влево и вправо. Это часть кода, который устанавливает страницу:UIImageView, связанный с URL-адресом, когда отображается
-(void)setupPage{
[scrollView setDelegate:self];
[self.scrollView setBackgroundColor:[UIColor blackColor]];
[scrollView setCanCancelContentTouches:NO];
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
//cargar fotos
CGFloat cx = 0;
for (id row in promosArray) {
NSLog(@"imagen %@", [row url]);
UIImage *image = [row foto];
//image = [image imageRotatedByDegrees:90.0f];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
CGRect rect = imageView.frame;
rect.size.height = image.size.height;
rect.size.width = image.size.width;
rect.origin.x = ((scrollView.frame.size.width - image.size.width)/2) + cx;
rect.origin.y = ((scrollView.frame.size.height - image.size.height)/2);
imageView.frame = rect;
[imageView setUserInteractionEnabled:YES];
[scrollView addSubview:imageView];
cx += scrollView.frame.size.width;
}
self.pageControl.numberOfPages = [promosArray count];
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
[cargando setHidden:YES];
[scrollView setHidden:NO];
[pageControl setHidden:NO];
}
Я беру информацию из promosArray, которым является массив объектов типа promo
с этим заголовком
@interface Promo : NSObject
@property (strong, nonatomic) UIImage *foto;
@property (strong, nonatomic) NSURL *url;
-(id) initWithUIImage: (UIImage *) f andNSURL: (NSURL *) u;
@end
Так промо просто объект для хранения как UIImage, который он должен показать, так и URL-адрес, на который он ссылается, при использовании.
Итак, мой вопрос в том, как сделать, что UIImages, когда «коснулся внутри», открывает окно сафари с соответствующим URL-адресом? Я попробовал добавить кнопку с тем же фреймом, что и subview, и у меня только 1 кнопка (или все они в одном месте)
Думаю, что это меня больше всего осложняет, связывая каждую кнопку с соответствующим URL-адресом.
Спасибо!
Я думал о наследовании от UIImageView. Часть UITapGestureRecognizer - это то, что меня беспокоит. потому что прикосновение - такая прекрасная вещь, я никогда не смогу обработать кран так хорошо, как это делает UIButton. (Кто-то еще сказал это в комментарии к подобной теме) Вот почему я думаю, что у меня есть изображениеView с кнопкой над ним. – Daniel
Вы должны иметь возможность использовать UIGestureRecognizerState UIGestureRecognizerStateEnded, чтобы ощутить прикосновения. Вы можете решить получить немного более сложный и подкласс из UIView, который будет способствовать созданию образа и созданию UIbutton для вас (UIView - это родительский класс, который будет содержать изображение и кнопку внутри своих границ). То же, что и выше, но теперь с кнопкой и немного больше работы. Определенно стоит учесть, что логика инкапсулирована. – Sandoze
Наконец-то с помощью UITapGestureRecognizer. У меня была проблема с использованием двух кадров, я «двигался» не так, поэтому кнопки не работали. Спасибо за помощь! – Daniel