IOS development and ios development tutorial
Gesture remove Controller
Similar to IT home, QQ, QQ music Removal Controller
# Import "NavigationController. h "@ interface NavigationController ()/** store the full screen of each controller */@ property (nonatomic, strong) NSMutableArray * images; @ property (nonatomic, strong) UIImageView * lastVcView; @ property (nonatomic, strong) UIView * cover; @ end @ implementation NavigationController-(UIImageView *) lastVcView {if (! _ LastVcView) {UIWindow * window = [UIApplication sharedApplication]. keyWindow; UIImageView * lastVcView = [[UIImageView alloc] init]; lastVcView. frame = window. bounds; self. lastVcView = lastVcView;} return _ lastVcView;}-(UIView *) cover {if (! _ Cover) {UIWindow * window = [UIApplication sharedApplication]. keyWindow; UIView * cover = [[UIView alloc] init]; cover. backgroundColor = [UIColor blackColor]; cover. frame = window. bounds; cover. alpha = 0.5; self. cover = cover;} return _ cover;}-(NSMutableArray *) images {if (! _ Images) {self. images = [[NSMutableArray alloc] init];} return _ images;}-(void) viewDidLoad {[super viewDidLoad]; // drag gesture UIPanGestureRecognizer * recognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self action: @ selector (dragging :)]; [self. view addGestureRecognizer: recognizer];}-(void) dragging :( UIPanGestureRecognizer *) recognizer {// if there is only one sub-controller, stop dragging if (self. viewControllers. count <= 1) return; // The distance from CGFloat tx = [recognizer translationInView: self. view]. x; if (tx <0) return; if (recognizer. state = UIGestureRecognizerStateEnded | recognizer. state = UIGestureRecognizerStateCancelled) {// determine whether to restore the pop or CGFloat x = self. view. frame. origin. x; if (x> = self. view. frame. size. width * 0.5) {[UIView animateWithDuration: 0.25 animations: ^ {self. view. transform = CGAffineTransformMakeTranslation (self. view. frame. size. width, 0);} completion: ^ (BOOL finished) {[self popViewControllerAnimated: NO]; [self. lastVcView removeFromSuperview]; [self. cover removeFromSuperview]; self. view. transform = CGAffineTransformIdentity; [self. images removeLastObject];} else {[UIView animateWithDuration: 0.25 animations: ^ {self. view. transform = CGAffineTransformIdentity;}] ;}} else {// move view self. view. transform = CGAffineTransformMakeTranslation (tx, 0); UIWindow * window = [UIApplication sharedApplication]. keyWindow; // Add it to the end of self. lastVcView. image = self. images [self. images. count-2]; [window insertSubview: self. lastVcView atIndex: 0]; [window insertSubview: self. cover aboveSubview: self. lastVcView] ;}}/*** generate */-(void) createScreenShot {uigraphicsbeginimagecontextwitexceptions (self. view. frame. size, YES, 0.0); [self. view. layer renderInContext: UIGraphicsGetCurrentContext ()]; UIImage * image = UIGraphicsGetImageFromCurrentImageContext (); [self. images addObject: image];}-(void) viewDidAppear :( BOOL) animated {[super viewDidAppear: animated]; if (self. images. count> 0) return; [self createScreenShot];}-(void) pushViewController :( UIViewController *) viewController animated :( BOOL) animated {[super pushViewController: viewController animated: animated]; [self createScreenShot];} @ end
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.