iphone - How can I transform a UIView from being parallel to the ground to being perpendicular? -
i want transform view plane parallel ground plane perpendicular ground.
any ideas?
to rotate view in 3d, need modify transform
property of view's layer.
it sounds want rotate view around x axis. , guess want perspective, edge closer viewer appears larger , edge farther viewer appears smaller.
we'll write helper function makes transform. start identity transform:
static catransform3d transformwithangle(cgfloat angle) { catransform3d transform = catransform3didentity;
then set m34
component of transform based on distance viewer view:
transform.m34 = -1.0f / 300.0f;
if use number larger 300
, perspective weaker. if use number smaller 300
, perspective stronger.
next, add rotation:
transform = catransform3drotate(transform, angle, 1, 0, 0);
then return transform:
return transform; }
let's want apply view named self.riseview
. want rotation around bottom edge of view, set layer's anchor point bottom edge:
- (void)viewdidload { cgrect frame = self.riseview.frame; self.riseview.layer.anchorpoint = cgpointmake(0.5f, 1.0f); self.riseview.frame = frame;
and initialize layer's transform angle of 0:
self.riseview.layer.transform = transformwithangle(0); }
you can make view “set” (rotate down ground plane) rotating angle of -m_pi_2
:
- (ibaction)setbuttonwastapped:(id)sender { [self animateriseviewtoangle:-m_pi_2]; }
and can make “rise” (rotate up) rotating angle of zero:
- (ibaction)risebuttonwastapped:(id)sender { [self animateriseviewtoangle:0]; }
here's how animation:
- (void)animateriseviewtoangle:(cgfloat)angle { [uiview animatewithduration:2 animations:^{ self.riseview.layer.transform = transformwithangle(angle); }]; }
Comments
Post a Comment