Graphics Reference
In-Depth Information
{
[ super viewDidLoad ];
//add the door
self .doorLayer = [ CALayer layer ];
self .doorLayer. frame = CGRectMake ( 0 , 0 , 128 , 256 );
self .doorLayer. position = CGPointMake ( 150 - 64 , 150 );
self .doorLayer. anchorPoint = CGPointMake ( 0 , 0.5 );
self .doorLayer. contents =
( __bridge id )[ UIImage imageNamed : @"Door.png" ]. CGImage ;
[ self .containerView. layer addSublayer : self .doorLayer];
//apply perspective transform
CATransform3D perspective = CATransform3DIdentity ;
perspective. m34 = - 1.0 / 500.0 ;
self .containerView. layer . sublayerTransform = perspective;
//add pan gesture recognizer to handle swipes
UIPanGestureRecognizer *pan = [[ UIPanGestureRecognizer alloc ] init ];
[pan addTarget : self action : @selector (pan:)];
[ self . view addGestureRecognizer :pan];
//pause all layer animations
self .doorLayer. speed = 0.0 ;
//apply swinging animation (which won't play because layer is paused)
CABasicAnimation *animation = [ CABasicAnimation animation ];
animation. keyPath = @"transform.rotation.y" ;
animation. toValue = @( - M_PI_2 ) ;
animation. duration = 1.0 ;
[ self .doorLayer addAnimation :animation forKey : nil ];
}
- ( void )pan:( UIPanGestureRecognizer *)pan
{
//get horizontal component of pan gesture
CGFloat x = [pan translationInView : self . view ]. x ;
//con vert from points to animation duration
//using a reasonable scale factor
x /= 200.0f ;
//update timeOffset and clamp result
CFTimeInterval timeOffset = self .doorLayer. timeOffset ;
timeOffset = MIN ( 0.999 , MAX ( 0.0 , timeOffset - x));
self .doorLayer. timeOffset = timeOffset;
Search WWH ::




Custom Search