Определение прикосновения к изображению с помощью touchesMoved: в пользовательской ячейке - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть пользовательская ячейка, где у меня есть изображение, flag. Используя этот метод, когда я перемещаю курсор по изображению, элемент управления не вводит if. Я использовал этот метод в других классах без проблем, но с пользовательской ячейкой он не работает.

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

    [super touchesMoved:touches withEvent:event];   

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

    if ([touch view] == flag) {
        NSLog(@"flag"); // Does not enter here
    }

        // But here
}

1 Ответ

1 голос
/ 02 ноября 2011

Вот кое-что, что может привести вас к ответу. Если вы хотите, чтобы касания были сняты, необходимо переопределить UITableView или UITableViewCell. Переопределив прикосновения в вашем UITableViewCell, вы сможете оценить, какое представление было затронуто, как вы делаете в данный момент. Обратите внимание, что если вы коснетесь представления содержимого и переместитесь по представлению изображения, к которому вы прикасаетесь (и, следовательно, возвращены набором касаний), все равно будет представление содержимого. Если коснуться UIImageView, вы получите это представление вернулось и приведет к тому, что ваш NSLog будет записан.

Как дополнительный пункт, который вы должны установить,

[self.flag setUserInteractionEnabled:YES];

или вы можете установить флажок взаимодействия в инспекторе атрибутов. Чтобы убедиться, что сенсорные события запускаются. Я не уверен, что это точно отвечает на ваш вопрос, но я надеюсь, что это поможет.

Вот проблема, которая у меня была, и надеюсь, это поможет. Моя проблема заключалась в том, что у меня был UIView, в котором был UITableView и несколько других меньших UIViews. Я хотел иметь возможность перетаскивать меньшие виды и помещать их в ячейки таблицы, устанавливая изображение UITableViewCell в соответствии с CALayer для меньшего вида, которого коснулись. Вот сенсорный код, который я использовал.

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

    UIGraphicsBeginImageContext(t.view.bounds.size);
    [t.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    self.draggedView = [[UIImageView alloc] initWithImage:img];

    CGPoint centre = [[touches anyObject] locationInView:self.view];
    [self.draggedView setCenter:centre];
    [self.draggedView setAlpha:0.5];
    [self.view addSubview:self.draggedView];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    CGPoint centre = [[touches anyObject] locationInView:self.view];
    [self.draggedView setCenter:centre];

}

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

    CGPoint centre = [[touches anyObject] locationInView:self.view];
    UIView *hit = [self.tableView hitTest:centre withEvent:event];

    UIGraphicsBeginImageContext(self.draggedView.bounds.size);
    [self.draggedView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    if(hit!=nil){
        UITableViewCell *tvc = (UITableViewCell *)hit.superview;
        [tvc.imageView setImage:img];

        UITableView *tv = (UITableView *)tvc.superview;
        NSIndexPath *ip = [tv indexPathForCell:tvc];
        [tv deselectRowAtIndexPath:ip animated:YES];
    }

    [self.draggedView removeFromSuperview];
    self.draggedView = nil;
}

Тест попадания в touchesEnded возвращает UITableViewCellContentView, так что для получения ячейки, я просто запрашиваю ее суперпредставление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...