Я использую 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), но это просто создало много серого пространства слева (после панорамирования оно встало на место нормально, но я не хотел заставлять пользователя делать это).
Есть идеи?
Спасибо!