首页 / IOS / IOS 自定义 滑动返回 手势
IOS 自定义 滑动返回 手势
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了IOS 自定义 滑动返回 手势,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4273字,纯文字阅读大概需要7分钟。
内容图文
![IOS 自定义 滑动返回 手势](/upload/InfoBanner/zyjiaocheng/1092/3d02e726e5354f54b3b7b88a7049a714.jpg)
/**
只需要在你自定义的导航控制器中,改成如下代码即可,自定义手势返回
*/
#define KEY_WINDOW [[UIApplication sharedApplication] keyWindow]
#define kScreenW KEY_WINDOW.bounds.size.width
#define kAnimateDuration 0.3
#define kDefaultAlapa 0.5
#define kDefaultScale 0.95
#define iOS7 ([UIDevice currentDevice].systemVersion.floatValue >= 7.0)
#import "CXNavigationController.h"
#import <QuartzCore/QuartzCore.h>
@interfaceCXNavigationController ()
{
NSMutableArray *_images; //图片数组
UIView *_bgView; //背景图
UIView *_blankMask; //面罩
UIImageView *_imageView; //图像
CGPoint _startPoint; //开始接触点
}
@end
@implementation CXNavigationController
- (void)viewDidLoad{
[ superviewDidLoad];
_images = [NSMutableArrayarray];
if (!iOS7) {
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizeralloc] initWithTarget:selfaction:@selector(panMove:)];
[ self . viewaddGestureRecognizer:pan];
}
}
- ( void )panMove:(UIPanGestureRecognizer *)pan{
if (self.viewControllers.count <= 1) {
return;
}
CGRect selfF = self.view.frame;
CGPoint location = [pan locationInView:KEY_WINDOW];
if (pan. state == UIGestureRecognizerStateBegan) { //开始拖拽
_startPoint = location;
_imageView.image = [_imageslastObject];
[ KEY_WINDOWinsertSubview:_bgViewbelowSubview:self.tabBarController.view];
_imageView . transform = CGAffineTransformMakeScale(kDefaultScale, kDefaultScale);
} else if (pan. state == UIGestureRecognizerStateChanged){ //拖拽中
CGFloat marginX = location.x - _startPoint.x;
marginX = marginX > kScreenW ? kScreenW : marginX;
marginX = marginX < 0 ? 0 : marginX;
selfF.origin.x = marginX;
self.view.frame = selfF;
CGFloat scale = kDefaultScale + marginX * 1.0 / 6400;
scale = marginX == kScreenW ? 0.5 : scale;
scale = marginX == 0 ? 0 : scale;
_imageView.transform = CGAffineTransformMakeScale(scale, scale);
CGFloat alpha = kDefaultAlapa - (1 - kDefaultAlapa) * marginX * 1.0 / kScreenW;
alpha = marginX == kScreenW ? kDefaultAlapa : alpha;
alpha = marginX == 0 ? 0 : alpha;
_blankMask.alpha = alpha;
} else if (pan. state == UIGestureRecognizerStateEnded){ //结束
CGFloat marginX = location.x - _startPoint.x;
if (marginX > 50) {
marginX = marginX > kScreenW ? kScreenW : marginX;
CGFloat dur = kAnimateDuration - marginX * 1.0 / 2000;
[ UIViewanimateWithDuration:dur animations:^{
CGRect selfF = self.view.frame;
selfF.origin.x = KEY_WINDOW.bounds.size.width;
self.view.frame = selfF;
_blankMask.alpha = 0;
_imageView . transform = CGAffineTransformMakeScale(1, 1);
} completion:^(BOOL finished) {
[_imagesremoveLastObject];
[_bgViewremoveFromSuperview];
CGRect rect = self.view.frame;
rect.origin.x = 0;
self.view.frame = rect;
[ superpopViewControllerAnimated:NO];
}];
}else{
CGFloat marginX = location.x - _startPoint.x;
marginX = marginX > 50 ? 50 : marginX;
marginX = marginX < 0 ? 0 : marginX;
CGFloat dur = marginX * 1.0 / 500;
[ UIViewanimateWithDuration:0.1 + dur animations:^{
CGRect selfF = self.view.frame;
selfF.origin.x = 0;
self.view.frame = selfF;
}];
}
}
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
if ( self .viewControllers.count > 0) {
if (!iOS7) {
[selfcreateBg];
}
}
[superpushViewController:viewController animated:animated];
}
#pragma mark 创建背景
- (void)createBg{
[ _images addObject :[ selfcurrentScreenImage]];
if (!_bgView) {
_bgView = [[UIViewalloc] initWithFrame:KEY_WINDOW.bounds];
_bgView .backgroundColor = [UIColorblackColor];
_imageView = [[UIImageViewalloc] initWithFrame:KEY_WINDOW.bounds];
_imageView .backgroundColor = [UIColorclearColor];
[_bgViewaddSubview:_imageView];
_blankMask = [[UIViewalloc] initWithFrame:KEY_WINDOW.bounds];
_blankMask .backgroundColor = [UIColorblackColor];
_blankMask.alpha = kDefaultAlapa;
[_bgViewaddSubview:_blankMask];
}
}
#pragma mark 获取当期屏幕
- (UIImage *)currentScreenImage{
UIGraphicsBeginImageContextWithOptions(KEY_WINDOW.bounds.size, self.view.opaque, 0.0);
if ( self .topViewController.tabBarController) {
[ self .topViewController.tabBarController.view.layerrenderInContext:UIGraphicsGetCurrentContext()];
}else{
[ self . view . layerrenderInContext:UIGraphicsGetCurrentContext()];
}
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
原文:http://www.cnblogs.com/d2688/p/3773145.html
内容总结
以上是互联网集市为您收集整理的IOS 自定义 滑动返回 手势全部内容,希望文章能够帮你解决IOS 自定义 滑动返回 手势所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。