Выдвиньте UIImageView с другим UIImageView, возможно? - PullRequest
0 голосов
/ 15 сентября 2011

Возможно ли панорамировать UIImageView, и когда он пересекается с фреймом другого UIImageView, этот другой UIImageView будет перемещаться другим UIImageView, не пропуская его?Надеюсь это имеет смысл!

Если это возможно, не могли бы вы дать мне несколько идей о том, как я буду реализовывать это?

Я полагаю, что это будет примерно так ...

кадр пересекает кадр слева или справа по оси x / y, другой кадр перемещается в том же направлении на то же расстояние, что и толкающая рамка.Хотя эта логика в некотором смысле имеет для меня смысл, я не уверен, как бы я реализовал это в коде.

Буду очень признателен за любые советы, которые вы можете предложить.

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

Итак, вас интересует только панорамирование влево / вправо ...

Предположим, у вас есть 2 UIImageViews, a & b, как подпредставления некоторого другого UIView и определенные как члены класса некоторого класса.

Вы можете получить помощь в обнаружении жестов панорамирования (перетаскивания) в каждом из этих представлений, создав экземпляры UIPanGestureRecognizer и добавив их в каждый UIImageView с помощью метода addGestureRecognizer:

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

Теперь пример кода:

- (void) didMove:(UIPanGestureRecognizer*)recognizer {
    UIView* view = [recognizer view];

    // Remember our UIImageViews are class members called, a & b
    //
    UIView* otherView = view == a ? b : a;    

    if (recognizer.state == UIGestureRecognizerStateBegin 
        || recognizer.state == UIGestureRecognizerStateChanged) {

        // Moving left will have a negative x, moving right positive
        //
        CGPoint translation = [recognizer translationInView:view.superview];
        view.center = CGPointMake(view.center.x + translation.x, view.center.y);

        // Reset so we always track the translation from the current view position
        //
        [recognizer setTranslation:CGPointZero inView:view.superview];

        if (CGRectIntersectsRect(view.frame, otherView.frame)) {
            // Translate by the same number of points to keep views in sync
            //
            otherView.center = CGPointMake(otherView.center.x + translation.x, otherView.center.y);
        }
    }
}

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

1 голос
/ 17 сентября 2011

Вы можете сделать это следующим образом:

Во-первых, создайте UIImageView и назначьте ему UIImage.

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

Поскольку вы хотите, чтобы карта сдвинулась, вам нужно изменить координату x на отрицательное значение, чтобы оно соскальзывало с обзора.

Вышеупомянутый код переопределения просмотра изображения должен быть дан в группе методов UIView setAnimation ... с требуемой задержкой.

Для достижения эффекта push есть метод, вызываемый в том же блоке кодов анимации, который создает новый просмотр изображений (с тем же именем, что и в первом просмотре изображений) и удерживает его вне вида.Это за пределами ширины экрана.(не забудьте освободить карту, которая была ранее оттолкнута)

Затем снова создайте новый кадр для этого изображения, чтобы он отображался в центре экрана .... Когда выше три шага кодапоместите в блок анимации код для UIView или UIImageView с временем задержки, и вы достигнете требуемого эффекта.

Надеюсь, это поможет ....

счастливое кодирование ....

1 голос
/ 15 сентября 2011

Похоже, вам лучше использовать что-то вроде Cocos2D с его спрайтами, пересечениями и некоторой базовой физикой ...

...