Панорамирование - Исходное положение моего изображения перед панорамированием

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

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

Есть ли способ таким образом начать начальное положение на широком изображении?

  override func didMoveToView(view: SKView) {
            self.scaleMode = SKSceneScaleMode.Fill;
            background = SKSpriteNode(imageNamed: "map")
            background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
            background.blendMode = .Replace
            background.zPosition = -1

            addChild(background)

            let pan = UIPanGestureRecognizer(target: self, action: "dragScene:")
            pan.minimumNumberOfTouches = 1;
            self.view!.addGestureRecognizer(pan)
        }
       func dragScene(gesture: UIPanGestureRecognizer)
        {

            let xRange = SKRange(lowerLimit: 250,upperLimit: 764)
            let yRange = SKRange(lowerLimit:0,upperLimit:size.height)
            background.constraints = [SKConstraint.positionX(xRange,y:yRange)]

            let trans = gesture.translationInView(self.view)
            let moveMap = SKAction.moveBy(CGVector(dx: trans.x * 0.08, dy: 0), duration: 0.0)
            background.runAction(moveMap)


        }

Я попытался изменить положение карты ниже, как это

CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

to

CGPointMake(CGRectGetMinX(self.frame), CGRectGetMidY(self.frame));

(поэтому используйте min вместо middle), но это просто создало много серого пространства слева (после панорамирования оно встало на место нормально, но я не хотел заставлять пользователя делать это).

Есть идеи?

Спасибо!


person NullHypothesis    schedule 27.03.2016    source источник


Ответы (1)


Ну, может быть, это не лучший способ, но вот как я это решил:

 let xRange = SKRange(lowerLimit: 250,upperLimit: 764)
        let yRange = SKRange(lowerLimit:0,upperLimit:size.height)
        background.constraints = [SKConstraint.positionX(xRange,y:yRange)]

        background.runAction(SKAction.moveBy(CGVector(dx: 2000, dy: 0), duration: 0.0))

Я добавил этот код в didMoveToView сразу после того, как впервые добавил фоновый узел на экран.

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

..Тогда пользователь может нормально панорамировать. Это сработало!

person NullHypothesis    schedule 27.03.2016