2012-03-08 2 views
0

У меня есть какой-то слайдер изображения, чтобы показать некоторые рекламные изображения («промо»). Я использовал фрагмент, который я нашел где-то здесь. Он работает, заполняя 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-адресом.

Спасибо!

ответ

1

Рассмотрите возможность сделать свою фотографию соответствующим классом, который наследуется от UIImageView.

Таким образом, вы можете настроить его так же, как и в своем итераторе, но также и в NSUrl (что делает его ответственностью не за код клиента). Мало того, что вы можете расширить логику этого нового класса (F) oto, автоматически добавив UITapGestureRecognizer и попросите его ответить пользователю, открыв окно сафари.

+0

Я думал о наследовании от UIImageView. Часть UITapGestureRecognizer - это то, что меня беспокоит. потому что прикосновение - такая прекрасная вещь, я никогда не смогу обработать кран так хорошо, как это делает UIButton. (Кто-то еще сказал это в комментарии к подобной теме) Вот почему я думаю, что у меня есть изображениеView с кнопкой над ним. – Daniel

+0

Вы должны иметь возможность использовать UIGestureRecognizerState UIGestureRecognizerStateEnded, чтобы ощутить прикосновения. Вы можете решить получить немного более сложный и подкласс из UIView, который будет способствовать созданию образа и созданию UIbutton для вас (UIView - это родительский класс, который будет содержать изображение и кнопку внутри своих границ). То же, что и выше, но теперь с кнопкой и немного больше работы. Определенно стоит учесть, что логика инкапсулирована. – Sandoze

+0

Наконец-то с помощью UITapGestureRecognizer. У меня была проблема с использованием двух кадров, я «двигался» не так, поэтому кнопки не работали. Спасибо за помощь! – Daniel

Смежные вопросы