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

首頁 > 系統 > iOS > 正文

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

2020-07-26 02:33:44
字體:
來源:轉載
供稿:網友

簡述

所謂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

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

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久成人的性感天堂| 中文字幕精品—区二区| 亚洲精品永久免费精品| 亚洲欧美综合精品久久成人| 欧美国产乱视频| 亚洲精品美女视频| 欧美大片欧美激情性色a∨久久| 日韩欧美精品免费在线| 精品国产自在精品国产浪潮| 成人免费视频网| 在线观看国产精品日韩av| 欧美成人免费va影院高清| 日韩一区av在线| 奇门遁甲1982国语版免费观看高清| 国产精品福利在线观看网址| 精品成人在线视频| 91色视频在线观看| 日韩日本欧美亚洲| 激情久久av一区av二区av三区| 91九色精品视频| 中文字幕无线精品亚洲乱码一区| 欧美多人乱p欧美4p久久| 亚洲91av视频| 亚洲免费一级电影| 2019最新中文字幕| 国产小视频国产精品| 91精品久久久久久久久不口人| 久久久免费在线观看| 伊人男人综合视频网| 国产一区二区丝袜高跟鞋图片| 亚洲国产欧美一区二区丝袜黑人| 欧美成人精品激情在线观看| 在线观看国产精品日韩av| 尤物yw午夜国产精品视频| 亚洲欧美综合图区| 亚洲自拍av在线| 欧美国产乱视频| 成人情趣片在线观看免费| 国产丝袜精品第一页| 亚洲综合最新在线| 成人精品一区二区三区| 97色在线播放视频| 成人国产精品免费视频| 国产精品无码专区在线观看| 国产精品夜间视频香蕉| 欧美丝袜一区二区三区| 97香蕉超级碰碰久久免费的优势| 亚洲第一二三四五区| 久久久久久成人精品| 国产女精品视频网站免费| 欧美黄色免费网站| 精品久久久在线观看| 中文字幕日韩专区| 国产一区二区三区视频在线观看| 日韩专区在线播放| 日韩在线播放视频| 一区二区三区视频免费| 亚洲精品99久久久久中文字幕| 久久久久久午夜| 亚洲片国产一区一级在线观看| 91精品视频网站| 欧美中文字幕精品| 亚洲精品一区久久久久久| 色综合亚洲精品激情狠狠| 欧美黑人一区二区三区| 欧美激情一级欧美精品| 国产精品久久婷婷六月丁香| 亚洲人精品午夜在线观看| 91九色视频导航| 欧美日韩免费观看中文| 国产精品久久久久久久久免费看| 日日摸夜夜添一区| 日韩电影在线观看永久视频免费网站| 中文字幕在线看视频国产欧美| 美乳少妇欧美精品| 久久777国产线看观看精品| 国产精品一区二区久久国产| 91在线观看免费高清完整版在线观看| 青青在线视频一区二区三区| 欧美性猛交xxxx偷拍洗澡| 日韩精品在线免费观看| 欧美激情免费观看| 久久天天躁日日躁| 国产一区二区在线免费视频| 欧美日韩午夜视频在线观看| 国产一区二区香蕉| 亚洲精品按摩视频| 久久精品国产v日韩v亚洲| 久久久国产精品视频| 91夜夜揉人人捏人人添红杏| 精品国产91久久久久久| 久久视频免费观看| 中文字幕一区日韩电影| 欧美黑人xxxx| 国产精品国产三级国产aⅴ9色| 中文字幕日韩在线播放| 91精品国产91久久久久久最新| 国产在线观看精品| 久久亚洲综合国产精品99麻豆精品福利| 国产午夜精品久久久| 日韩在线观看高清| 日韩av在线免费| 国自产精品手机在线观看视频| 亚洲欧美在线看| 91豆花精品一区| 97在线视频免费播放| 日韩精品www| 中文字幕国产精品久久| 欧美激情精品久久久久久黑人| 尤物tv国产一区| 久久免费在线观看| 久久99精品视频一区97| 国产精品视频久| 亚洲免费中文字幕| 日韩禁在线播放| 欧美成人一区二区三区电影| 久久91亚洲精品中文字幕奶水| 久久久精品一区二区| 一区二区三区国产视频| 91免费欧美精品| 国产美女久久精品香蕉69| 亚洲综合av影视| 国产日韩精品一区二区| 国语自产在线不卡| 97视频在线观看免费| 精品亚洲永久免费精品| 欧美精品做受xxx性少妇| 日日狠狠久久偷偷四色综合免费| 成人写真福利网| 在线丨暗呦小u女国产精品| yellow中文字幕久久| 国产精品美女无圣光视频| 国产精品中文字幕久久久| 亚洲毛茸茸少妇高潮呻吟| 亚洲第一男人av| 一本大道久久加勒比香蕉| 久久综合亚洲社区| 性色av一区二区三区红粉影视| 欧美日韩电影在线观看| 欧美大片免费观看| 成人黄色av免费在线观看| 日韩电视剧免费观看网站| 国产日韩精品综合网站| 欧美一级黑人aaaaaaa做受| 国产精品久久久久久一区二区| 国产不卡一区二区在线播放| 欧美日本高清一区| 成人av在线网址| 欧美性理论片在线观看片免费| 欧美性在线观看| 久久99热精品这里久久精品| 亚洲大胆人体视频| 国模精品视频一区二区| 欧美激情精品久久久久| 久久不射电影网| 3344国产精品免费看| 亚洲综合中文字幕在线| 2021国产精品视频| 亚洲黄页视频免费观看| 欧美一区二粉嫩精品国产一线天| 国产精品久久久久9999| 国产精品视频99| 26uuu亚洲伊人春色| 成人在线中文字幕|