亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS體驗性優化之RTL適配右滑返回的實現

2019-10-21 18:42:34
字體:
來源:轉載
供稿:網友

簡述

所謂RTL方向布局就是right to left direction。也就是界面中的元素總是按從右往左的方向進行排列布局,大部分國家的書寫以及排列習慣都是從左往右,是LTR方向布局,而對于一些阿拉伯國家,文字的書寫以及展示的順序都是從右往左方向的。

iOS的導航支持左滑手勢返回上一個界面,這是果粉普遍喜歡的一個特性,iOS7之后的APP適配大多會保留這一特性,慢慢的大多用戶已經有了這種操作習慣,對于iPhone的無虛擬鍵,這種操作也能增加比較友好的用戶體驗。

在公司新項目之前,沒有考慮過多語言RTL的適配方案,開始做的時候UI方面基本實現用一套布局代碼支持RTL的兩種布局方向。但是真正拿在手里把玩體驗時才真切的感受到沒有側滑返回的RTL有多么的不爽。幾經查找并沒有找到可參考的合適方案,可能國內做多語言適配的技術圈本身就小,適配RTL的就顯得更加的稀有了。

希望能幫助到有需要的人,或者有更好的思路可以聯系共同探討。

思路

查不到可參考的資料,只能自己想一想比較合適的方式,恰好在實現一個首頁列表跳轉詳情頁時候,解決特殊的轉場動畫,突然就有了靈感??赡軕撚懈玫膶崿F方式,現將我的方式展現給大家。

解決方案

1、關鍵詞: UIPercentDrivenInteractiveTransition finishInteractiveTransition cancelInteractiveTransition

2、關鍵方法:updateInteractiveTransition:

3、實現方式:暫時以文字代碼描述,具體可參考之前共享的RTL解決方案,里面有相關源碼,末尾處會貼出路徑。

具體實現

1、處理navigation代理

使用runtime方式或者基類方式,viewdidappea每次設置nav的代理為自己,viewdiddisappear清空代理(Yoins新版中使用RTL框架中的分類)

- (void)RTL_viewWillAppear:(BOOL)animated{ [self RTL_viewWillAppear:animated]; self.navigationController.delegate = self;}- (void)RTL_viewWillDisappear:(BOOL)animated{ [self RTL_viewWillDisappear:animated]; if (self.navigationController.delegate == self) {  self.navigationController.delegate = nil; }}

2、右滑手勢添加

基類初始化時,RTL環境下添加右滑手勢,關閉左滑手勢,實現最基本的右滑返回。

Navigation 中實現

- (void)RTL_ViewWillAppear:(BOOL)animate{// self.view.backgroundColor = [UIColor whiteColor];// // Do any additional setup after loading the view. if (![[RTLManager appearance]RTL]) {  self.interactivePopGestureRecognizer.delegate = self; } self.interactivePopGestureRecognizer.enabled = ![[RTLManager appearance]RTL];  [self RTL_ViewWillAppear:animate];}

3、實現手勢交互(重點)

基類VC中 增加一個基礎屬性,保存臨時轉場上下文

@property (strong ,nonatomic)UIPercentDrivenInteractiveTransition *transitonContext;

在VC右滑動作觸發事件中,處理轉場動畫進度

- (void)handlePanGesture:(UIScreenEdgePanGestureRecognizer *)pan{// NSLog(@"_____%zd-----%zd",self.navigationController.childViewControllers.count,self.navigationController.viewControllers.count);// NSLog(@"----%@",NSStringFromCGPoint([pan translationInView:self.view])); CGFloat progress = ABS([pan translationInView:self.view].x) / (self.view.bounds.size.width * 1.0); progress = MIN(1.0, MAX(0.0, progress)); if (pan.state == UIGestureRecognizerStateBegan) {  // 創建過渡對象,彈出viewController  self.transitonContext = [[UIPercentDrivenInteractiveTransition alloc] init];  [self.navigationController popViewControllerAnimated:YES]; }else if (pan.state == UIGestureRecognizerStateChanged) {  // 更新 interactive transition 的進度  [self.transitonContext updateInteractiveTransition:progress]; }else if (pan.state == UIGestureRecognizerStateEnded || pan.state == UIGestureRecognizerStateCancelled) {  // 完成或者取消過渡  if (progress > 0.5) {   [self.transitonContext finishInteractiveTransition];  }  else {   [self.transitonContext cancelInteractiveTransition];  }  self.transitonContext = nil; }}- (id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController{ if (self.transitonContext) {  return self.transitonContext; } else {  return nil; }}

最后就是實現自定的各種轉場動畫了,可以簡單模仿系統的滑動切換轉場,具體處理在下面VC實現的方法中,返回一個處理轉場的實例即可

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC

4、貼一個簡單的動畫處理類

@implementation RTLPushAnimation

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{ return 0.5;}- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{ UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView *container = transitionContext.containerView; UIView *tmpV = [fromVC.view snapshotViewAfterScreenUpdates:YES]; [container addSubview:toVC.view]; toVC.view.transform = CGAffineTransformMakeTranslation(-toVC.view.bounds.size.width, 0); [container addSubview:tmpV]; [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{  tmpV.transform = CGAffineTransformMakeTranslation(toVC.view.bounds.size.width, 0);  toVC.view.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) {  [tmpV removeFromSuperview];  [transitionContext completeTransition:YES]; }]; }@end@implementation RTLPopAnimation- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{ return 0.5;}- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{ UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView *container = transitionContext.containerView; UIView *tmpV = [fromVC.view snapshotViewAfterScreenUpdates:YES]; [container addSubview:toVC.view]; toVC.view.transform = CGAffineTransformMakeTranslation(toVC.view.bounds.size.width, 0); [container addSubview:tmpV]; [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{  tmpV.transform = CGAffineTransformMakeTranslation(-toVC.view.bounds.size.width, 0);  toVC.view.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) {  [tmpV removeFromSuperview];  toVC.view.transform = CGAffineTransformIdentity;  [transitionContext completeTransition:!transitionContext.transitionWasCancelled]; }];}@end

end

大家或許有更好的處理方案,可以一切探討下。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美乱大交xxxxx| 国产精品第一区| 精品国产999| 国产精品pans私拍| 亚洲毛片在线免费观看| 亚洲欧洲在线视频| 人九九综合九九宗合| 成人啪啪免费看| 亚洲精品成a人在线观看| 国产日韩欧美在线| 久久久精品免费视频| 麻豆精品精华液| 91精品国产777在线观看| 亚洲va久久久噜噜噜| 欧美精品免费在线观看| 97在线视频免费| 91免费国产视频| 久久成人这里只有精品| 国产亚洲aⅴaaaaaa毛片| 欧美国产日韩中文字幕在线| 久久频这里精品99香蕉| 亚洲国产精品人人爽夜夜爽| 国产综合在线观看视频| 国产日韩欧美91| 久久精品国产一区| 亚洲国产精品久久久久秋霞不卡| 91精品视频观看| 国产日韩欧美在线| 亚洲欧美中文日韩在线v日本| 欧美性极品少妇精品网站| 日韩精品免费在线视频| 成人亲热视频网站| 久久成年人视频| 欧美激情精品久久久久久蜜臀| 91黑丝高跟在线| 精品国产欧美一区二区三区成人| 日韩欧美国产中文字幕| 亚洲人a成www在线影院| 日韩高清电影好看的电视剧电影| 亚洲电影免费观看高清| 国产精品美女主播在线观看纯欲| 91av在线播放| 欧美日韩中文在线| 国产成人综合精品在线| 97人人做人人爱| 亚洲天堂av在线免费观看| 亚洲成人免费在线视频| 中文字幕不卡在线视频极品| 亚洲91精品在线观看| 疯狂欧美牲乱大交777| 疯狂蹂躏欧美一区二区精品| 久久99精品国产99久久6尤物| 色婷婷综合久久久久中文字幕1| 亚洲第一精品电影| 欧美亚洲日本黄色| 亚洲最大av网| 亚洲视频在线免费看| 亚洲天堂av电影| 久久99久久99精品中文字幕| 欧美极品在线视频| 26uuu久久噜噜噜噜| 亚洲自拍偷拍第一页| 亚洲久久久久久久久久| 欧美有码在线视频| 国产精品久久久久不卡| 成人性生交大片免费观看嘿嘿视频| www欧美xxxx| 羞羞色国产精品| 亚洲人精选亚洲人成在线| 精品欧美一区二区三区| 久久国产加勒比精品无码| 在线成人中文字幕| xxx成人少妇69| 97在线日本国产| xxav国产精品美女主播| 欧美最猛性xxxxx(亚洲精品)| 日韩乱码在线视频| 亚洲国产欧美久久| 午夜精品久久久久久久久久久久| 亚洲精品成a人在线观看| 久久视频精品在线| 欧美日韩美女在线| 亚洲成人aaa| 日韩中文在线观看| 亚洲精品网站在线播放gif| 激情懂色av一区av二区av| 亚洲视频在线观看| 日韩av电影手机在线观看| 狠狠躁夜夜躁人人爽超碰91| 亚洲欧美另类自拍| 亚洲色图偷窥自拍| 日韩日本欧美亚洲| 亚洲人精选亚洲人成在线| 北条麻妃久久精品| 亚洲美女久久久| 欧美精品做受xxx性少妇| 视频在线观看99| 日韩av在线免费看| 国产成人极品视频| 97视频在线观看播放| 亚洲欧美变态国产另类| 亚洲丝袜在线视频| 欧美成人亚洲成人日韩成人| 欧美激情在线观看视频| 日韩小视频在线观看| 欧美日韩国产限制| 九九热最新视频//这里只有精品| 亚洲国产福利在线| 欧美激情精品久久久久久大尺度| 国内精品视频久久| 国产欧美欧洲在线观看| 欧美精品一区三区| 亚洲国产欧美在线成人app| 91网站在线看| 日本成人在线视频网址| 91老司机在线| 亚洲性日韩精品一区二区| 久久久久免费精品国产| 亚洲欧洲视频在线| 精品久久久香蕉免费精品视频| www.久久久久久.com| 久久久久久久久久久久av| 久久99热这里只有精品国产| 欧美一区三区三区高中清蜜桃| 中国日韩欧美久久久久久久久| 国产视频亚洲精品| 精品国产鲁一鲁一区二区张丽| 国产精品美腿一区在线看| 98视频在线噜噜噜国产| 国产精品99久久久久久www| 日韩专区在线播放| 成人a视频在线观看| 成人国产精品一区二区| 亚洲香蕉成视频在线观看| 欧美黑人性猛交| 亚洲专区中文字幕| 亚洲aaa激情| 亚洲国产精彩中文乱码av在线播放| 爱福利视频一区| 久久夜色精品国产欧美乱| 亚洲一区二区福利| 中文字幕国产亚洲2019| 国产精品扒开腿做爽爽爽视频| 欧美成人黑人xx视频免费观看| 日本久久久久久久久久久| 中文字幕久久精品| 国产日产久久高清欧美一区| 中文字幕亚洲字幕| 欧美性猛交xxxx乱大交极品| 久久亚洲综合国产精品99麻豆精品福利| 日韩中文字幕免费视频| 亚洲电影第1页| 国产精品福利在线| 中文字幕日韩欧美精品在线观看| 国产欧美一区二区三区久久人妖| 国产区精品视频| 精品国产欧美一区二区三区成人| 91精品国产乱码久久久久久久久| 久久久久久中文字幕| 亚洲free性xxxx护士白浆| 欧美成人精品在线观看| 国产69精品久久久久9999| 久久久久久久一区二区| 狠狠躁天天躁日日躁欧美|