Перетаскивание uiimageview в корзину при увеличении масштаба uiscrollview

Всем привет. Я искал в Интернете и действительно не нашел такой проблемы. Моя настройка выглядит следующим образом: я пытаюсь создать приложение, в котором пользователь перетаскивает uiimageviewss на uiview внутри uiscrollview (который может увеличивать масштаб), но также перетаскивает изображение в корзину для удаления. Когда вид прокрутки увеличен, пользователь все еще может перетаскивать, потому что я создал подкласс uiimageview и переопределил метод touchesMoved. Я хочу, чтобы пользователь мог перетаскивать uiimageviews в корзину в правом нижнем углу экрана. То, что я реализовал, уже работает, когда uiscrollview имеет обычный масштаб увеличения, но при увеличении вы не можете перетащить изображение в корзину, потому что корзина является подвидом самого представления контроллера (это было для того, чтобы он не масштабировался с uiview) и, конечно, не в правильных координатах экрана для uiscrollview.

Я нашел метод представления с именем ConvertRect, который преобразует прямоугольник в координаты любого представления, которое вы даете методу, но, похоже, это не работает. Я проверяю каждое изображение карты (подкласс изображения), которое проверяет, что кадр uiimageview пересекает кадр корзины. Поэтому я пробую этот метод, прежде чем делать эту проверку, но, как я уже сказал, он не работает.

Итак, при всей этой сложности, позвольте мне вкратце рассказать о моей проблеме. Я хочу перетаскивать изображения в корзину независимо от уровня масштабирования в uiscrollview. Я могу сделать мусорную корзину частью uiscrollview, но мне нужен способ, чтобы она оставалась в правом нижнем углу, а также не увеличивалась, когда это делает uiscrollview. Любые идеи были бы очень признательны, спасибо, ребята. :)


person Lizzy    schedule 24.10.2010    source источник


Ответы (1)


У меня была точно такая же задача.

В можно просто описать это вкратце:

Когда вы начинаете перетаскивать изображение, УДАЛИТЕ его из UISCrollView и добавьте его в качестве подвида в основной вид вашего ViewController.

убедитесь, что изображение не потеряется в процессе (имеется в виду: кто-то все еще сохраняет его).

Во время перетаскивания постоянно проверяйте, входит ли ваше изображение или выходит из него за пределы корзины. вы можете сделать это с помощью метода ниже:

-(void) checkForTrashCan
{
    CGRect rect =  [self.delegate.trashCan convertRect:self.view.frame fromView:self.view.superview];

    if ([self.delegate.trashCan rectIntersectBounds:rect])
    {
        if (NOT self.isInTrashMode)
        {
            [self enterTrashMode];
        }
    }
    else 
    {
        if (self.isInTrashMode)
        {
            [self exitTrashMode];
        }
    }
}  

Когда метод rectIntersectBounds является простым методом расширения для класса UIView, который я написал:

-(BOOL) rectIntersectBounds : (CGRect) rect
{
    return CGRectIntersectsRect(self.bounds, rect);
}

Когда перетаскивание закончилось, проверьте, находится ли ваш вид в корзине, и действуйте в соответствии с результатом.

person Avi Shukron    schedule 10.03.2011