CGRectIntersectsRect меняет изображение при наведении

Поэтому я должен исправить, один продукт, а другой мусорное ведро. Прямо сейчас он у меня есть, так что вы можете перетаскивать продукты в корзину, и когда вы отпустите, он проверит наличие CGRectIntersectsRect, а затем запустит функцию удаления продукта. Теперь я хочу сделать так, чтобы, когда вы наводите курсор на корзину, она менялась на светящуюся корзину (чтобы вы знали, что собираетесь удалить элемент). Теперь я предположил, что это будет простое изменение изображения при наведении. Итак, я попробовал следующее, но, похоже, это не сработало.

UIImage *hoverImage = [UIImage imageNamed: @"trashHover.png"];
[deleteItemButton setImage:hoverImage forState:UIControlStateHighlighted];

Любая идея о том, как я могу сделать так, чтобы, когда один прямоугольник находится над другим, мы могли изменить изображение? Или я должен делать что-то другое, чем CGRectIntersectsRect?


person CMOS    schedule 26.01.2015    source источник


Ответы (1)


Состояние UIControlStateHighlighted устанавливается, когда пользователь начинает касаться данного элемента. Пользователь должен был начать прикосновение к корзине, а не к перетаскиваемому элементу. Из документов:

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

Чтобы получить изображение корзины при перетаскивании другого изображения, вам нужно будет ответить на обратный вызов touchesMoved:withEvent.

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *touch in touches)
    {
        CGPoint touchPoint = [touch locationInView:self.view];
        CGPoint buttonPoint = [self.view convertPoint:touchPoint toView:self.someButton];

        if ([self.someButton pointInside:buttonPoint withEvent:event])
        {
            [self.someButton setImage:[UIImage imageNamed:@"highlight"] forState:UIControlStateNormal];
        }
        else
        {
            [self.someButton setImage:[UIImage imageNamed:@"normal"] forState:UIControlStateNormal];
        }
    }
}
person psobko    schedule 26.01.2015
comment
Так это будет под функцией CGRectintersectswithRect или полностью отдельно? Все еще изучающая цель C. - person CMOS; 27.01.2015
comment
Если вы уже используете CGRectIntersectsRect() для обнаружения попаданий, вы можете использовать его вместо pointInside:withEvent:. Я предпочитаю последнее, потому что вы можете делать такие вещи, как создание подкласса метода для вашей корзины и определение меньшего хит-бокса (как в случае с закругленным изображением). - person psobko; 27.01.2015
comment
Извините, поэтому я понятия не имею, есть ли у вас решение этой проблемы, но я попробовал ваше решение и столкнулся с проблемой: событие touchesMoved не запускается, если для кнопок установлено значение userInteractionEnabled = YES. Если я установлю для него значение НЕТ, я могу щелкнуть и провести пальцем по корзине, и она подсветится, как я хотел, однако больше не перемещает изображение вместе с моим пальцем. (Поскольку взаимодействие установлено на NO). И если для него установлено значение YES, он запускает touchesMoved только один раз в начале, есть идеи? - person CMOS; 02.02.2015