2013-02-26 2 views
2

У меня есть UIScrollView со многими UIImageViews. Мне нужно перетащить изображение с UIScrollView в другой вид. Вне экрана scrollView работает. Но внутренний вид прокрутки не срабатывает. Я использовал touchesBegan, touchesMoved и т.п. способ. Пожалуйста, помогите мне.Обнаружение касания UIImage, добавленного как subview UIScrollView

-(IBAction)selectBut:(id)sender 
{ 

scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(x,y,w,h)]; 

scrollView.userInteractionEnabled = YES; 

int y = 0; 

for (int i = 0; i < [myArray count]; i++) { 

UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(0, y, 75, 30)]; 

image.userInteractionEnabled = YES; 

    y=y+35; 

[scrollView addSubview:image]; 

} 

[self.view addSubview:scrollView]; 

[scrollView setContentSize:CGSizeMake(150, 300)] 

} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

{ 

    UITouch *touch = [touches anyObject]; 

    if ([touch tapCount] == 1) { 

     NSLog(@"One touch !!"); 
    } 

} 
+0

Вы пытались установить UIImageView на '[self setUserInteractionEnabled: TRUE]'? его отключает по умолчанию, если он не ошибается. –

+0

@IkmalEzzani, UserInteractionEnabled - true.but не работает. – IKKA

+0

Внутри UIScrollView touchhesBegan не работает для подзаголовков. Просто подтвердите свой ответ. – Madhu

ответ

4

вам нужно настроить UIImageView с собственным видом унаследованной от UIImageView. Предоставьте методы прикосновения в этом подклассе под заказ и добавьте его на свой UIScrollView.

Подвалы UIScrollview никогда не вызовет метод touchesBegan. Вам нужно настроить с помощью subview, чтобы получить свойства touchesBegan этого добавленного представления subview/customized.

Я хочу сказать, взять подкласс ImageView как

CustomImageView *imageView = [[CustomImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; 
[imageView setUserInteractionEnabled:YES]; 
[scrollView addSubview:imageView]; 
[imageView release]; 

CustomImageView класса должен быть унаследован от UIImageView как

@interface CustomImageView : UIImageView 
    { 
    } 

в # .m Файл

#import "CustomImageView.h" 

@implementation CustomImageView 


    - (id)initWithFrame:(CGRect)frame 
    { 
self = [super initWithFrame:frame]; 
if (self) { 

} 
return self; 
} 



    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
     NSLog(@"%s", __FUNCTION__); 

    } 

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 


    } 

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 


    UITouch *touch = [touches anyObject]; 

     if ([touch tapCount] == 2) { 
    drawImageView.image = nil; 
    return; 
    } 

    } 
+1

Большое вам спасибо ...... ты отличный .. – IKKA

+0

Ваш прием :) – Madhu

+0

@madhu: Я ценю ваш ответ. Действительно здорово и полезно !! –

3

Добавить Tap жест распознаватель с точки зрения прокрутки для включения прикосновение вид внутри прокрутки:

UITapGestureRecognizer *singlTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(methodName:)]; 
singlTap.cancelsTouchesInView = NO; //Default value for cancelsTouchesInView is YES, which will prevent buttons to be clicked 
[scrollViewName addGestureRecognizer:singlTap]; 

затем написать свой код в указанном методе.

-(void)methodName:(UITapGestureRecognizer *)gesture 
{ 
    //your code here 
} 
+1

Не забудьте установить exclusiveTouch, например, как Bhargavi, упомянутое ниже ... Если вы этого не сделаете, то пользователь может случайно «нажать» изображение, когда он просто прокручивает ... 'exclusiveTouch' предотвратит случайные касания, которые если пользователь просто прокручивается (особенно с включенным пейджингом), они не будут случайно запускать 50 гагллионов (действительный номер) кранов. –

1

Я надеваю Не знаю, поможет ли это вам. Но попробуйте установить свойство exclusiveTouchUIImageView на YES.

+0

Это важно! Многие этого не замечают. –

0

Вы добавили свой scrollview как IBOutlet? Если его от xib и, как вы говорите, касания доступны вне прокрутки, а не внутри, я думаю, вы случайно не сняли userInteractionEnabled для scrollview, который блокирует события касания. И вы добавили UIImageViews в виде подпрограмм в UIScrollView. Для UIImageView вы должны сначала установить userInteractionEnabled на YES, а затем добавить любые жесты, если необходимо, чтобы получить события или использовать touchhesBegan, touchsMoved методов. Если вы не установили взаимодействие, вы не получите сенсорные события в UIImageView. Если родительское представление я подразумеваю, что взаимодействие UIScrollView отключено, вы тоже не столкнетесь с UIImageView. Надеюсь, это поможет :)

+0

Я добавил UIScrollView программно. Я установил scrollView.userInteractionEnabled = YES. Но прикосновение не работает .. – IKKA

+0

Вы имеете в виду, что прикосновение к изображению не работает? – Meera

+0

ya, касание на изображении не работает. UIScrollView содержит все изображения. – IKKA

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