2017-05-23 2 views
0

Ich versuche, dieses Bild zu beschneiden, die eine SKSpriteNode ist:ein Bild von oben in Swift Cropping

enter image description here

ich von der Spitze dieses Bild zuzuschneiden versuche, so dass ich den Boden halten Halbkreis dieser Form.

enter image description here

So verwende ich diese beiden Methoden, um diese Aufgabe zu erfüllen: Zum Beispiel würde es diese abgeschnitten

func recalculateScore() { 
    currentScore -= decreaseRate 
    let image = UIImage(cgImage: (vial.texture?.cgImage())!) 
    vial.texture = SKTexture(image: cropBottomImage(image: image)) 
} 

func cropBottomImage(image: UIImage) -> UIImage { 
    let height = CGFloat(image.size.height/3) 
    let rect = CGRect(x: 0, y: image.size.height - height, width: image.size.width, height: height) 
    return cropImage(image: image, toRect: rect) 
} 
func cropImage(image:UIImage, toRect rect:CGRect) -> UIImage { 
    let imageRef:CGImage = image.cgImage!.cropping(to: rect)! 
    let croppedImage:UIImage = UIImage(cgImage:imageRef) 
    return croppedImage 
} 

Dies ist jedoch zu diesem Ergebnis führt:

Es ist, als ob es komprimiert wurde. Ich denke, mein Problem könnte in dieser Zeile sein: let rect = CGRect (x: 0, y: image.size.height - Höhe, Breite: image.size.width, Höhe: Höhe)

Ist die CGRect koordinieren von (0,0) liegen in der obersten linken Ecke? Ich bin ein wenig verwirrt, was die x- und y-Parameter für den CGRect bedeuten.

+0

Sie nicht Ihre Sprite Ändern der Größe, so ist es vertikal dehnen – Knight0fDragon

+0

Warum verwenden Sie SKCropNode nicht? –

Antwort

0

Verkleinern Sie Ihre Sprite, was geschieht, ist das beschnittene Textur das Sprite zu füllen, Stretching, und da Sie nur vertikal zuschneiden, wird es nur strecken vertikal

func recalculateScore() { 
    currentScore -= decreaseRate 
    let image = UIImage(cgImage: (vial.texture?.cgImage())!) 
    vial.texture = SKTexture(image: cropBottomImage(image: image)) 
    vial.size = vial.texture.size 

} 
+0

Ok, haben das x und y des CGRect immer relativ zur oberen linken Ecke? – Pablo

+0

Nein, es hängt alles vom Ankerpunkt ab – Knight0fDragon

+0

Ich nehme an, Sie wollen Ankerpunkt y bei Null, das ist der Boden – Knight0fDragon