прикосновения начались с нескольких UIImageView обнаруживает неправильный UIImageView - PullRequest
1 голос
/ 01 декабря 2010

У меня проблема с распознаванием касаний на iPad.

Я подклассифицировал UIImageView следующим образом:

@interface MyUIImageView : UIImageView 
{
    BOOL _dragActive;
    CGPoint originalLocation;
}

@end

@implementation MyUIImageView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{   
    _dragActive = YES;
    originalLocation = self.center;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if (_dragActive) 
    {
        UITouch* touch = [touches anyObject];
        self.center = [touch locationInView:self.superview];
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if (_dragActive)
    {
        self.center = originalLocation;
    }

    _dragActive = NO;
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if (_dragActive) 
    {
        self.center = originalLocation;
    }

    _dragActive = NO;
}

@end

У меня есть несколько элементов управления ImageView (MyUIImageView) на стороне вида контроллерав стороне, но мой touchSegan больше всего вызывается только для передней панели, хотя они разделены на виде контроллера.

Похоже, что существует невидимый "слой обнаружения", который появляется за пределами ImageViews.

Когда я щелкаю и перетаскиваю ImageView, перетаскиваемый является левым или правым, в зависимости от того, какой из них находится впереди.Если я изменю ось z, то поведение повторяется, но на изображениях, которые находятся спереди.

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

Для ситуации, которую вы описали, вам следует подумать о том, чтобы контроллер (вид которого содержит все ваши изображения) обрабатывал события касания. Я думаю, что то, что вы описываете как «слой обнаружения», на самом деле является областью экрана, которую ваше изображение-изображение занимает в начале потока сенсорных событий. Я полагаю, что перемещение представления изображения на лету (перетаскивание) действительно лучше обрабатывается родительским представлением.

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

1 голос
/ 01 декабря 2010

Я не получаю четкого представления о ваших точных требованиях. Если вы просто хотите, чтобы касания были обнаружены для определенного imageView (т.е. просмотра изображений слева или справа), чем пытаться передать этот объект UITouch вместо использования anyobject ->
UITouch * touch = [затрагивает anyObject];
Используйте этот способ, если работает UITouch * touch = [затрагивает imgViewObject];

0 голосов
/ 07 декабря 2010

Наконец-то я прибил проблему. UIImageViews, которые я пытался переместить, имели больший фон, чем Image. Это мешало обнаружению касания изображениями родного брата.

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

Изменение автоматического определения размера для UIImageViews в Интерфейсном Разработчике решило проблему.

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