2017-01-13 4 views
1

J'essaie d'appliquer une transformation de perspective à une vue (appelons subview) qui dessine seulement un carré le long de son cadre, est centrée horizontalement dans sa vue d'ensemble et est 3/4 de sa largeur: enter image description hereAfficher l'écrêtage après CATransform3DRotate

J'utilise cet extrait:

var rotationAndPerspectiveTransform = CATransform3DIdentity 
rotationAndPerspectiveTransform.m34 = CGFloat(-1.0/280.0) 
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 30.0 * CGFloat.pi/180.0, 1.0, 0.0, 0.0) 
subview.layer.transform = rotationAndPerspectiveTransform 

ce qui fait la transformation que j'ai besoin, mais a un effet bizarre - la partie droite du rectangle est "coupé":

enter image description here

Quelle est la cause? Comment puis-je l'éviter?

Merci!

Répondre

0

Ah, c'est un bon vieux problème par rapport au cadre. Le cadre devient plus large après la transformation et ne rentre plus dans les limites.

Comme je l'ai toujours voulu qu'il soit centré horizontalement, ce Snipped a fait l'affaire:

let transformedFrame = segmentView.layer.frame 
let transformedBounds = segmentView.layer.bounds 
let correctedBoundsX = (transformedFrame.width - transformedBounds.width)/2 

segmentView.layer.bounds = CGRect(x: correctedBoundsX, y: transformedBounds.origin.y, width: transformedBounds.width, height: transformedBounds.height)