В зависимости от того, какая ширина и высота, контрагент должен искажаться. Центральная часть составляет всего 2% * 2% изображения и является основной частью масштабирования во время операций масштабирования.
Вы можете отобразить четыре угла без изменений, поэтому центральная часть может сильно исказиться, если масштабировать до (2X * 2X) исходного изображения, то есть от (0,02 * 0,02 -> 1,02 * 1,02), это более чем в 2500 раз искажение в центре изображения.
В вашем коде нет проблем.
Пока концепция верна. Если вы не можете получить то, что хотите, возможно, это размер вашего исходного изображения.
sprite.texture = SKTexture(imageNamed: "ImageName")
print (sprite.texture?.size()) // If size is very large here, then you cannot get what you want. The size of image should be small than target. Actually only when you zoom in the texture, i.e, the current size is smaller than CGSize(width: myCustomWidth, height: myCustomHeight), you may get the result.
sprite.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
sprite.scale(to:CGSize(width: myCustomWidth, height: myCustomHeight))
sprite.size = CGSize(width: myCustomWidth, height: myCustomHeight)
Последняя часть — мой тестовый код.
class TestViewController: UIViewController{
@IBOutlet weak var skview: SKView!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let sprite1 = SKSpriteNode()
sprite1.texture = SKTexture(imageNamed: "round.png")
print (sprite1.texture?.size())
sprite1.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
print (sprite1.size)
sprite1.scale(to:CGSize(width: 300, height:100))
sprite1.size = CGSize(width: 300, height: 100)
print (sprite1)
skview.scene?.addChild(sprite1)
}}
person
E.Coms
schedule
14.10.2018