2013-12-02 3 views
0

Я пытаюсь создать простое приложение, в котором вы можете переместить свой UIImageView, прикоснувшись к нему и тащив его.TouchesMoved с UITouch

мой UIImageView называется IMV

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

UITouch * touch = [touches anyObject]; 

if([touch view] == self.imv){ 
    CGPoint location = [touch locationInView:self.view]; 
    self.imv.center = location; 

} 
} 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch * touch = [touches anyObject]; 

if([touch view] == self.imv){ 
    CGPoint location = [touch locationInView:self.view]; 
    self.imv.center = location; 

} 
} 

I'am пытается решить эту, как целый день, и я не знаю, что это неправильно. Если я отключу оператор if, он еще не работает. Что я могу сделать?

Спасибо за ответы

ответ

1

Если вы не подклассы UIImageView (маловероятно), ваше мнение получает сенсорные события.

В эти дни это проще & более обычным для использования UIGestureRecognizer для такого рода вещей, в данном случае UIPanGestureRecognizer.

например.

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragImageView:)]; 
[self.imv addGestureRecognizer:pan]; 


- (void)dragImageView:(UIPanGestureRecognizer *)dragImageView { 
    if(UIGestureRecognizerStateBegan == state) { 
     originalCenter = self.imv.center; // add CGPoint originalCenter; member 
    } else if(UIGestureRecognizerStateChanged == state) { 
     CGPoint translate = [pan translationInView:self.imv.superview]; 
     self.imv.center = CGPointMake(originalCenter.x + translate.x, originalCenter.y + translate.y); 
    } 
} 
0

От немного поэкспериментировать, кажется, что [touch view] возвращается главный UIView и не ваш подвид, следовательно, проблема с if заявление не работает (я добавил UIImageView в раскадровке XIB). EDIT - это потому, что UIImageView s не обрабатывает события касания по умолчанию - см. here. При добавлении регулярного UIView в viewDidLoad, похоже, работает так, как вы ожидали.

Во всяком случае, это адаптированная версия кода работает для меня

-(void)moveImageForTouches:(NSSet*)touches 
{ 
    UITouch * touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:self.view]; 

    if(CGRectContainsPoint(self.imv.frame, location)) 
    { 
     self.imv.center = location; 
    } 

} 

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self moveImageForTouches:touches]; 
} 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self moveImageForTouches:touches]; 
} 
+0

HI. Я пытался использовать этот код, но когда вы перемещаете UIImageView быстро, вы теряете элемент. – poppytop

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