vadim
vadim

Reputation: 119

Replacing image in UIScrollView on selected item

I created simple UIScrollView that have images. Each time an image pressed i want to change that image, how can I do it?

I creating this UIScrollView and initializing it with NSMutableArray with images.

      UIScrollView *myScroll = [[UIScrollView alloc] initWithFrame: CGRectMake (0,100,200,30)];
        NSMutableArray = *images = [NSMutableArray alloc] initWithObjects: img1,img2,img3,nil];

for (int i=0; i<3; i++)
{
        UIImageView *imageV = [UIImageView alloc];
        [imageV setImage:[images objectAtIndex:i]];
        [myScroll addSubview:imageV];
        [imageV release];
}


    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector (changeImg:)];
    [myScroll addGestureRecognizer: singleTap];

and the toucing I'm cathing with the touched place on the scroll:

- (void) singleTapGestureCaptured:(UITapGesturerecongnizer *) gesture
{
    CGPoint touch = [gesture locationInView:myScroll];

}

By X,Y of touched item i know what image was selected

Here I need to change for example the first image of myScroll...How can i do it?

Upvotes: 0

Views: 1772

Answers (3)

TheTiger
TheTiger

Reputation: 13354

Add UITapGestureRecognizer on UIImageView and set its userInractionEnabled: YES which is NO by default for UIImageView.

UIScrollView *myScroll = [[UIScrollView alloc] initWithFrame: CGRectMake (0,100,200,30)];
NSMutableArray = *images = [NSMutableArray alloc] initWithObjects: img1,img2,img3,nil];

for (int i=0; i<3; i++)
{
    //In your question you didn't set `imageView` frame so correct it
    UIImageView *imageV = [[UIImageView alloc]initWithFrame:yourFrame];
    [imageV setImage:[images objectAtIndex:i]];
    [imageV setUserInteractionEnabled:YES];
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector (changeImg:)];
    [imageV addGestureRecognizer: singleTap];
    [myScroll addSubview:imageV];
    [imageV release];
}

After adding all imageView successfully you get them click like this :-

-(void)changeImg:(id)sender
 {
     UIGestureRecognizer *recognizer = (UIGestureRecognizer*)sender;
     UIImageView *imageView = (UIImageView *)recognizer.view;
     [imageView setImage:[UIImage imageNamed:@"anyImage.png"]];
 }

Upvotes: 1

Rajneesh071
Rajneesh071

Reputation: 31081

Your application will crash because you are accessing the index 3, but there is not any object at index 3.

UIScrollView *myScroll = [[UIScrollView alloc] initWithFrame: CGRectMake (0,100,200,30)];
NSMutableArray = *images = [NSMutableArray alloc] initWithObjects: img1,img2,img3,nil];
[myScroll addSubview:[images objectAtIndex:0];
[myScroll addSubview:[images objectAtIndex:1];
[myScroll addSubview:[images objectAtIndex:2];  

Now you can access the image view with tagValue

-(void)changeImg :(UIGestureRecognizer*)recog
{
    UIScrollView *scroll = (UIScrollView*)recog.view;
    CGPoint point = scroll.contentOffset;
    int imagetag = (point.y/scroll.frame.size.height);

    UIImageView *image=(UIImageView*)[[scroll subviews] objectAtIndex:imagetag];
    NSLog(@"Image tag = %d",image.tag);

    image.image=[UIImage imageNamed:@"Icon-72.png"];
}

Upvotes: 1

Apple_iOS0304
Apple_iOS0304

Reputation: 1102

A simple implementation will be, if you use a custom button and change its image on its IBAction.. Still you can addGesture to ur UIImageView too and on the

if(recognizer.state == UIGestureRecognizerStateBegan)

you can change the image on runtime. I hope this helps. Cheers!!

Upvotes: 0

Related Questions