0

iOSの開発に取り掛かっていて、グリッドビュー形式のscrolviewで画像を表示できないという問題に直面しているのはわずか1週間です...適切なグリッドビュー形式で画像を表示するようにフレームサイズを設定する方法がわかりません。

これが私のコードです

スクロールビューに5つの画像を追加します

for(int i=1;i<6;i++)
            {
                UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(x+0, 0, 320, 460)];
                [image setImage:[UIImage imageNamed:[NSString stringWithFormat:@"e1%d.png",i]]];
                [scr addSubview:image];
                x+=320;
                UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
                tapGesture.numberOfTapsRequired = 1;
                tapGesture.delegate = self;
                image.userInteractionEnabled = YES;
                [image addGestureRecognizer:tapGesture];
            }

            scr.pagingEnabled=YES;
            scr.contentSize = CGSizeMake(320*5, 300);
            [self.view addSubview:scr];

しかし、5つの画像すべてが1つの水平線で表示されますが、すべての行で2つの画像を表示したいと思います。

4

1 に答える 1

1

これが解決策です、私はそれを私のアプリに実装しました。これが私のコードですsv_portは私のscrollViewです。SDWebImageDownloaderクラスファイルをダウンロードして、プロジェクトにインポートします。プロジェクトに関連するフレームワークを追加します。imageIO.framework、QuartzCoreのように

画像がURLからフェッチされていない場合は、asyncImageビューを使用する必要がないため、SDWebImageDownloaderをダウンロードする必要はありません。

今、あなたの.mに追加します

#import "UIImageView+WebCache.h"
#import "SDImageCache.h"
#import "SDWebImageCompat.h"

//function for adding image in your scrollview
-(void)populateImages
{
   int x=6,y=6;

   for(UIView * view in sv_port.subviews)
   {
      if([view isKindOfClass:[UIImageView class]])
      {
          [view removeFromSuperview]; view = nil;
      }
      if([view isKindOfClass:[UIButton class]])
      {
          [view removeFromSuperview]; view = nil;
      }
   }

   for(int p=0;p<[Manufacturer count];p++)
   {
      UIButton *btnImageButton = [UIButton buttonWithType:UIButtonTypeCustom];
      btnImageButton.frame = CGRectMake(x,y,70,70);
      [btnImageButton setTag:p];
      [btnImageButton addTarget:self action:@selector(nextview:)    forControlEvents:UIControlEventTouchUpInside];

      UIActivityIndicatorView *spinny = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
   spinny.frame=CGRectMake(btnImageButton.frame.origin.x+25,btnImageButton.frame.origin.y+25, 20, 20);
      spinny.backgroundColor=[UIColor clearColor];
      [spinny startAnimating];

      [sv_port setScrollEnabled:YES];
      [sv_port addSubview:spinny];

      UIImageView *asyncImageView = [[[UIImageView alloc] initWithFrame:btnImageButton.frame] autorelease];
      asyncImageView.backgroundColor=[UIColor clearColor];
      CALayer *layer;
      layer = asyncImageView.layer;
      layer.borderWidth = 0.5;
      layer.cornerRadius = 5;
      layer.masksToBounds = YES;


      [asyncImageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", yourUrl] ]   placeholderImage:[UIImage imageNamed:nil] options:0 andResize:CGSizeMake(btnImageButton.frame.size.width,btnImageButton.frame.size.height) withContentMode:UIViewContentModeScaleAspectFit];
      asyncImageView.contentMode = UIViewContentModeScaleAspectFit;

      [sv_port addSubview:btnImageButton];
      [sv_port addSubview:asyncImageView];
      int imgCntPort=0;

      imgCntPort=(sv_port.frame.size.width/(asyncImageView.frame.size.width));

      //NSLog(@"imgport %d",imgCntPort);
      if((p+1)%imgCntPort==0)
      {
         x=5;
         y=y+80;
      }
      else
      {
         x=x+80;
      } 
    }
    sv_port.contentSize = CGSizeMake(0, y);
    glob_x =0; glob_y =y;
}

このコードにより、4つの画像が連続して取得されます。xとyのco-Ordianteを変更することにより、表示する行ごとの画像の数を維持できます。

お役に立てれば。ありがとう

于 2013-03-20T09:40:32.927 に答える