gpt4 book ai didi

swift - (Swift) 平移和缩放限制为特定尺寸的图像

转载 作者:行者123 更新时间:2023-11-30 12:24:00 24 4
gpt4 key购买 nike

我正在尝试在 spritekit 中平移和缩放图像背景,我已经成功地使缩放工作正常,并手动输入了一些关于可以平移图像的距离的限制,但是问题是当您向右平移屏幕时到图像的边缘,然后缩小背景显示。我希望相机仅限制屏幕上的图像,而不限制任何空白背景。关于我应该如何做到这一点或任何更好的解决方案有什么想法吗?这是我到目前为止所得到的

class GameScene:SKScene{
var cam: SKCameraNode!
var scaleNum:CGFloat=1

override func didMove(to view: SKView){
cam=SKCameraNode()
cam.setScale(CGFloat(scaleNum))
self.camera=cam
self.addChild(cam)
let gesture=UIPinchGestureRecognizer(target: self, action: #selector(zoomIn(recognizer:)))
self.view!.addGestureRecognizer(gesture)
}

func zoomIn(recognizer: UIPinchGestureRecognizer){
if recognizer.state == .changed{
cam.setScale(recognizer.scale)
scaleNum=recognizer.scale
if cam.xScale<1 || cam.yScale<1{
cam.setScale(1)
}
if cam.xScale>3 || cam.yScale > 3{
cam.setScale(3)
}
// recognizer.scale=1
test()
}
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let firstTouch=touches.first
let location=(firstTouch?.location(in: self))!
let previousLocation=firstTouch?.previousLocation(in: self)
cam?.position.x -= location.x - (previousLocation?.x)!
cam?.position.y -= location.y - (previousLocation?.y)!
test()
}

func test(){
if cam.position.x < 1000*scaleNum{
cam.position.x=1000*scaleNum
}
if cam.position.x > 9200*scaleNum{
cam.position.x=9200*scaleNum
}
if cam.position.y<617*scaleNum{
cam.position.y=617*scaleNum
}
if cam.position.y>4476*scaleNum{
cam.position.y=4476*scaleNum
}
}
}

最佳答案

首先,我会将您的 zoomIn 函数更改为:

func zoomIn(recognizer: UIPinchGestureRecognizer){
if recognizer.state == .changed {
scaleNum = recognizer.scale
if scaleNum < 1 { scaleNum = 1 }
if scaleNum > 3 { scaleNum = 3 }
cam.setScale(scaleNum)
test()
}
}

更容易理解,您不会两次设置相机比例,最重要的是,当您限制相机比例时,scaleNum反射(reflect)了该限制值。以前不是这样的,事实上,这个小小的改变可能就是你的全部问题。

现在我对 UIPinchGestureRecognizer 没有太多经验,但我认为您的缩放手势工作“正常”的原因是因为您直接从 recognizer.scale 分配到凸轮比例。如果我错了,请纠正我,但我认为 UIGestureRecognizer 对于每个新手势始终以 1 的比例开始,但您的相机比例保持其最后的值。

举个例子,假设您的相机比例为 1。用户放大到比例为 2,场景完美放大。用户抬起手指结束手势。然后用户尝试放大更多,因此他们开始一个新的手势,从比例 1 开始,但您的场景仍处于比例 2。您不能直接指定手势比例,否则图像比例将“跳跃” ' 对于每个新手势返回到 1。您必须从手势比例空间转换为相机比例空间。

具体如何做到这一点取决于设计和感觉的选择。由于没有经验,我的建议是将我的 zoomIn 函数中的行从

`scaleNum = recognizer.scale'

`scaleNum *= recognizer.scale`

尝试这两个版本,并让我知道它们是如何工作的。如果仍然存在问题,那么它很可能存在于您的 test() 函数中。如果是这样,我会根据需要尽力提供帮助。

关于swift - (Swift) 平移和缩放限制为特定尺寸的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com