2012-03-08 8 views
0

私はいくつかのプロモーション画像( 'プロモーション')を表示するための画像スライダを持っています。私はここでどこかで見つけたスニペットを使用しました。 UIImageViewsでscrollViewにフレームを設定して動作させ、UIScrollViewDelegateメソッドとPageControlメソッドを使用して左右に移動します。これはページを設定するコードの一部です:URLをタップしたときにURLにリンクするUIImageView

-(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でSafariウィンドウを開いて「内部を触った」とき? サブビューと同じフレームのボタンを追加しようとしましたが、ボタンが1つしかありません(または同じ場所にあるもの)

それぞれのボタンを対応するURLにリンクするのが最も難しいと思います。

ありがとうございます!

答えて

1

あなたの写真をUIImageViewを継承した独自のクラスにすることを検討してください。

このようにして、イテレータのように設定することもできますが、NSUrlを渡すこともできます(クライアントコードではなく、fotoの責任にする)。この新しい(F)otoクラスのロジックをUITapGestureRecognizerを自動的に追加するだけでなく、Safariウィンドウを開くことでユーザーに応答させることができます。

+0

私はUIImageViewから継承することを検討していました。 UITapGestureRecognizerの部分は私を悩ますものです。タッチはとても良いことなので、UIButtonと同じようにタップを処理することはできません。 (他の人が同様の話題のコメントでこれを言った)そういうわけで私はむしろボタンを使ってimageViewを持っていると思うのです。 – Daniel

+0

UIGestureRecognizerState UIGestureRecognizerStateEndedを使用して触感を感じ取ることができるはずです。画像の作成を橋渡しし、UIbuttonを作成するUIViewから少し複雑なサブクラスを取得することができます(UIViewは画像とボタンを境界内に保持する親クラスです)。上記と同じですが、ボタンともう少し作業があります。論理をカプセル化し続けることを検討する価値があります。 – Sandoze

+0

最後に、UITapGestureRecognizerを使用して終了しました。私は2つのフレームの使用に問題がありました。私は間違ったものを「動かす」ため、ボタンが機能しませんでした。ご協力ありがとうございました! – Daniel

関連する問題