2012-09-22 3 views
0

Я создал простой UIScrollView, который имеет изображения. Каждый раз, когда изображение нажимается, я хочу изменить это изображение, как я могу это сделать?Замена изображения в UIScrollView по выбранному элементу

Я создаю это UIScrollView и инициализирую его NSMutableArray с изображениями.

 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]; 

и toucing я цеплялись с прикоснулся места на свитке:

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

} 

По X, Y из прикоснулся пункта я знаю, что изображение было выбрано

Здесь мне нужно измените, например, первое изображение myScroll ... Как я могу это сделать?

+0

что img1, img2, img3 ???? не говорите, что это 'UIImage'. Вы меня полностью смутили в 'UIImageView' и' UIImage' .... – TheTiger

+0

Это UIImage :) Извините за путаницу. – vadim

+0

Вы ошибаетесь в моем отредактированном ответе. – TheTiger

ответ

1

Добавить UITapGestureRecognizer на UIImageView и установить его userInractionEnabled:YES который NO по умолчанию для 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]; 
} 

После добавления всех imageView успешно вы получите их нажмите как это: -

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

Я добавил 'UITapGestureReconnizer' в' scrollView', поэтому, прикоснувшись к каждому изображению, я знаю, какое именно изображение было выбрано. Могу ли я изменить, например, изображение atIndex 3 на 'myScroll' (отредактировал вопрос) – vadim

+0

Вы говорите, что img1, img2, img3 являются' UIImage', и вы можете добавить их на 'scrollView' ..... и ваш массив имеет объект с индексом 0,1,2, как вы можете использовать 1,2,3 ..... Пожалуйста, очистите вашу проблему. Знаете ли вы разницу b/w 'UIImage' и' UIImageView' ??? и что такое 'subView' ?? – TheTiger

+0

Да, я знаю..и выложил половину кода, забыли основную петлю ... см. Мой отредактированный вопрос снова – vadim

1

Ваша заявка будет врезаться, потому что вы получаете доступ к индексу 3, но не какой-либо объект с индексом 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]; 

Теперь вы можете открыть представление изображения с 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"]; 
} 
+0

Да, вы правы @ Rajneesh071 он рухнет, я написал одну дополнительную строку, просто скопировав свой код :) (его работы прекрасны). Но я не могу видеть, где именно я изменяю изображение с помощью вашего кода, скажем, я хочу изменить второе изображение с помощью 'NewImage.png', где я говорю' scrollBar', какой элемент exatclly изменить? – vadim

+1

проверить мой обновленный код ... * test * – Rajneesh071

+0

его всегда печатать 'тег 0' на каждое изображение, которое я касаюсь ... Я изменил свой код, следуя приведенному выше коду, и заменил' UIGestureRecognizer на '' scrollView' для каждого 'UIImageView' , «Точка» на каждом шаге равна 0. – vadim

0

A простая реализация будет, если вы используете пользовательскую кнопку и измените ее изображение на своем IBAction. Еще вы можете добавитьGurure к ur UIImageView тоже и на

if(recognizer.state == UIGestureRecognizerStateBegan) 

вы можете изменить изображение во время выполнения. Надеюсь, это поможет. Ура !!

+0

Это вопрос ... Как изменить его во время выполнения, с распознавателем у меня нет проблем, я могу уловить каждое касание выбранного элемента, проблема в изменении изображения X с изображение Y – vadim

+0

, когда вы добавили распознаватель жестов на любом UIImage. то приложенный к нему метод будет вызываться автоматически, здесь вы можете проверить состояние жестов как «UIGestureRecognizerStateBegan», а затем в блоке if сделать изменение изображения в соответствии с вашим требованием. вот ссылка на вашу релевантность ...его как создать небольшую фотогалерею в iPhone. http://mobile.tutsplus.com/tutorials/iphone/uigesturerecognizer/ Надеюсь, это поможет вам! –

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