0

配列からの画像がスクロール ビューに表示される 1 つの写真スライド ショー アプリを作成しました。私はそれにタッチイベントを追加しました。タッチすると、UIimageViewのタッチされた画像の詳細ビューになるはずですが、マウスクリックでは取得できません(シミュレーターで実行しています)が、alt +マウスクリックで取得します- その時点で、地図をズームするのと同じように 2 つのポイントがあります。それが正しい方法だとわかっています。

コードを追加する

 - (void)viewDidLoad
{
    [super viewDidLoad];
    scrollView.delegate = self;
    scrollView.scrollEnabled = YES;
    int scrollWidth = 120;
    scrollView.contentSize = CGSizeMake(scrollWidth,80);

    int xOffset = 0;
    imageView.image = [UIImage imageNamed:[imagesName objectAtIndex:0]];

    for(int index=0; index < [imagesName count]; index++)
    {
        UIImageView *img = [[UIImageView alloc] init];
        img.bounds = CGRectMake(10, 10, 50, 50);
        img.frame = CGRectMake(5+xOffset, 0, 160, 110);
        NSLog(@"image: %@",[imagesName objectAtIndex:index]);
        img.image = [UIImage imageNamed:[imagesName objectAtIndex:index]];
        [images insertObject:img atIndex:index];



        scrollView.contentSize = CGSizeMake(scrollWidth+xOffset,110);
        [scrollView addSubview:[images objectAtIndex:index]];

        xOffset += 170;
    }
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     [self.nextResponder touchesBegan:touches withEvent:event];

     UITouch * touch = [[event allTouches] anyObject];

     for(int index=0;index<[images count];index++)
     {
         UIImageView *imgView = [images objectAtIndex:index];


         NSLog(@"x=%f,y=%f,width=%f,height=%f",     
  imgView.frame.origin.x,imgView.frame.origin.y,
  imgView.frame.size.width,imgView.frame.size.height);
  NSLog(@"x= %f,y=%f",[touch locationInView:self.view].x,[touch      
  locationInView:self.view].y) ;


         if(CGRectContainsPoint([imgView frame], [touch locationInView:scrollView]))
         {
             [self ShowDetailView:imgView];
             break;
         }
    }
}

-(void)ShowDetailView:(UIImageView *)imgView
{
    imageView.image = imgView.image;
}
4

1 に答える 1

0

touchesBegan:メソッドですべてのヒット テストを自分で実行する代わりUITapGestureRecognizer. 次のようにコードを変更します。

- (void)viewDidLoad
{
    //...

    for(int index=0; index < [imagesName count]; index++)
    {
        UIImageView *img = [[UIImageView alloc] init];
        img.bounds = CGRectMake(10, 10, 50, 50);
        img.frame = CGRectMake(5+xOffset, 0, 160, 110);
        NSLog(@"image: %@",[imagesName objectAtIndex:index]);
        img.image = [UIImage imageNamed:[imagesName objectAtIndex:index]];
        [images insertObject:img atIndex:index];

        UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]

        [img addGestureRecognizer:tapGR];
        img.userInteractionEnabled = YES;

        /...

    }
}

- (void)handleTap:(UIGestureRecognizer *)sender
{
     UIImageView *iv = sender.view;
     [self ShowDetailView:iv];
}
于 2012-10-30T14:09:47.173 に答える