Перетаскивание uiimageview в «мусорную корзину» при увеличении uiscrollview - PullRequest
0 голосов
/ 24 октября 2010

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

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

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

1 Ответ

0 голосов
/ 10 марта 2011

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

В можно просто кратко описать:

Когда вы начинаете перетаскивать изображение, УДАЛИТЕ его из 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);
}

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

...