本文转载至  http://blog.csdn.net/totogo2010/article/details/8637430

 
 
 

1、介绍

有的博友看了上篇博文iOS界面-仿网易新闻左侧抽屉式交互 ,在微博里问,网易新闻里的内容和评论的拖拽如何实现,

上面的UINavigation如何嵌进去。可能不少人有这样的需求,现在花了些时间把这两个效果做一下,

和大家分享交流。思路和上篇基本差不多,但是没有用到UINavigation,其实在我看来上面的返回、

评论按钮都是可以通过addsubview添加的。内容页和评论页的手势交互 实现的效果如下:

 
图中的箭头是手势拖动的方向。

2、跳转添加

网易新闻的按钮都是可点击的,所以在这个例子中除了能通过手势操作。运行例子代码的时候注意下面的内容:
我在代码中添加了一些button,下面图中红色框框里的区域是可点可跳转的:
列表页第一条新闻可点,内容页左上角可点返回,评论页左上角也可点返回。其他部分都是图片。

3、部分代码

仿照customView的代码做了新闻内容的视图 DetailView,代码如下:

--

  1. #import <UIKit/UIKit.h>
  2. @class CommentView;
  3. @interface DetailView : UIView
  4. {
  5. CommentView *commentView;
  6. BOOL isPanComment;
  7. }
  8. - (id)initWithView:(UIView*)contentView parentView:(UIView*) parentView;
  9. @property (nonatomic, strong) UIView *parentView; //抽屉视图的父视图
  10. @property (nonatomic, strong) UIView *contentView; //抽屉显示内容的视图
  11. @end
  1. //
  2. //  DetailView.m
  3. //  NeteaseNews
  4. //
  5. //  Created by rongfzh on 13-3-5.
  6. //  Copyright (c) 2013年 rongfzh. All rights reserved.
  7. //
  8. #import "DetailView.h"
  9. #import "CommentView.h"
  10. #import <QuartzCore/QuartzCore.h>
  11. @implementation DetailView
  12. - (id)initWithFrame:(CGRect)frame
  13. {
  14. self = [super initWithFrame:frame];
  15. if (self) {
  16. // Initialization code
  17. }
  18. return self;
  19. }
  20. - (id)initWithView:(UIView *)contentView parentView:(UIView *)parentView{
  21. self = [super initWithFrame:CGRectMake(0,0,contentView.frame.size.width, contentView.frame.size.height)];
  22. if (self) {
  23. [self addSubview:contentView];
  24. UIPanGestureRecognizer *panGestureRecognier = [[UIPanGestureRecognizer alloc]
  25. initWithTarget:self
  26. action:@selector(HandlePan:)];
  27. [self addGestureRecognizer:panGestureRecognier];
  28. UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  29. backBtn.frame = CGRectMake(0, 0, 80, 50);
  30. [backBtn addTarget:self
  31. action:@selector(back:)
  32. forControlEvents:UIControlEventTouchUpInside];
  33. [self addSubview:backBtn];
  34. UIImageView *imageCommentView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"comment.png"]];
  35. imageCommentView.frame  = CGRectMake(0, 0,
  36. self.frame.size.width,
  37. self.frame.size.height);
  38. commentView = [[CommentView alloc] initWithView:imageCommentView parentView:self];
  39. commentView.center = CGPointMake(480, 230);
  40. [[commentView layer] setShadowOffset:CGSizeMake(10, 10)];
  41. [[commentView layer] setShadowRadius:20];
  42. [[commentView layer] setShadowOpacity:1];
  43. [[commentView layer] setShadowColor:[UIColor blackColor].CGColor];
  44. [self addSubview:commentView];
  45. isPanComment = NO;
  46. }
  47. self.parentView = parentView;
  48. return self;
  49. }
  50. - (void)HandlePan:(UIPanGestureRecognizer*)panGestureRecognizer{
  51. CGPoint translation = [panGestureRecognizer translationInView:self.parentView];
  52. float x = self.center.x + translation.x;
  53. if (x < 160) {
  54. x = 160;
  55. }
  56. if(translation.x > 0){
  57. if (!isPanComment) {
  58. self.center = CGPointMake(x, 230);
  59. }
  60. }
  61. if (translation.x < 0 && self.center.x > 160) {
  62. if (!isPanComment) {
  63. self.center = CGPointMake(x, 230);
  64. }
  65. }else if(translation.x < 0){
  66. isPanComment = YES;
  67. commentView.center = CGPointMake(commentView.center.x + translation.x, 230);
  68. }
  69. if (commentView.center.x < 480 && translation.x > 0) {
  70. isPanComment = YES;
  71. commentView.center = CGPointMake(commentView.center.x + translation.x, 230);
  72. }
  73. if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) {
  74. if (commentView.center.x < 400) {
  75. [UIView animateWithDuration:0.4
  76. delay:0.1
  77. options:UIViewAnimationCurveEaseInOut
  78. animations:^(void){
  79. commentView.center = CGPointMake(160, 230);
  80. }completion:^(BOOL finish){
  81. isPanComment = NO;
  82. }];
  83. }else{
  84. [UIView animateWithDuration:0.4
  85. delay:0.1
  86. options:UIViewAnimationCurveEaseInOut
  87. animations:^(void){
  88. commentView.center = CGPointMake(480, 230);
  89. }completion:^(BOOL finish){
  90. isPanComment = NO;
  91. }];
  92. }
  93. if (self.center.x > 190) {
  94. [UIView animateWithDuration:0.4
  95. delay:0.1
  96. options:UIViewAnimationCurveEaseInOut
  97. animations:^(void){
  98. self.center = CGPointMake(480, 230);
  99. }completion:^(BOOL finish){
  100. [self.parentView exchangeSubviewAtIndex:1 withSubviewAtIndex:2];
  101. }];
  102. }else{
  103. [UIView animateWithDuration:0.4
  104. delay:0.1
  105. options:UIViewAnimationCurveEaseInOut
  106. animations:^(void){
  107. self.center = CGPointMake(160, 230);
  108. }completion:^(BOOL finish){
  109. }];
  110. }
  111. }
  112. [panGestureRecognizer setTranslation:CGPointZero inView:self.parentView];
  113. }
  114. - (void) back:(id)sender{
  115. [UIView animateWithDuration:0.4
  116. delay:0.1
  117. options:UIViewAnimationCurveEaseInOut
  118. animations:^(void){
  119. self.center = CGPointMake(480, 230);
  120. }completion:^(BOOL finish){
  121. [self.parentView exchangeSubviewAtIndex:1 withSubviewAtIndex:2];
  122. }];
  123. }
  124. /*
  125. // Only override drawRect: if you perform custom drawing.
  126. // An empty implementation adversely affects performance during animation.
  127. - (void)drawRect:(CGRect)rect
  128. {
  129. // Drawing code
  130. }
  131. */
  132. @end

3、评论页的view和内容页的代码差不多

代码还有很多值得优化的地方,现在只是展示实现了功能,手势判断部分代码比较乱,只要掌握了手势的原来,代码可以自己根据需求来修改

代码:

Github:https://github.com/schelling/NeteaseNews

CSDN资源:http://download.csdn.net/detail/totogo2010/5110546

容芳志 (http://blog.csdn.net/totogo2010)

iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势)的更多相关文章

  1. Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)

    另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...

  2. iOS仿网易新闻栏目拖动重排添加删除效果

    仿网易新闻栏目选择页面的基本效果,今天抽了点时间教大家如何实现UICollectionView拖动的效果! 其实实现起来并不复杂,这里只是基本的功能,没有实现细节上的修改,连UI都是丑丑的样子,随手画 ...

  3. Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...

  4. 类似掌盟的Tab页 Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签 (转)

    原博客地址  :http://blog.csdn.net/xiaanming/article/details/10766053 本文转载,记录学习用,如有需要,请到原作者网站查看(上面这个网址) 之前 ...

  5. Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了能更好的分享高质量的文章,所以开设了此专栏.文章代码都以Android Studio亲测运行,读者朋友可在后面直接下载源码.该专栏 ...

  6. 动态权限<二>之淘宝、京东、网易新闻 权限申请交互设计对比分析

    移动智能设备的快速普及,给生活带来巨大的精彩,但是智能设备上用户的信息数据很多,隐私数据也非常多,各种各样的app可能通过各种方式在悄悄的收集用户数据,而用户的隐私就变得耐人寻味了.比如之前的可以无限 ...

  7. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻clientTab标签

    之前用JakeWharton的开源框架ActionBarSherlock和ViewPager实现了对网易新闻clientTab标签的功能,ActionBarSherlock是在3.0下面的机器支持Ac ...

  8. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...

  9. 仿网易新闻 ViewPager 实现图片自动轮播

    新闻 App 首页最上方一般会循环播放热点图片,如下图所示. 本文主要介绍了利用 ViewPager 实现轮播图片,图片下方加上小圆点指示器标记当前位置,并利用 Timer+Handler 实现了自动 ...

随机推荐

  1. 洛谷 P1784 数独[DFS/回溯]

    To 洛谷.1784 数独类似题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行 ...

  2. Spring Cloud Feign 声明式服务调用

    目录 一.Feign是什么? 二.Feign的快速搭建 三.Feign的几种姿态 参数绑定 继承特性 四.其他配置 Ribbon 配置 Hystrix 配置 一.Feign是什么? ​ 通过对前面Sp ...

  3. JavaScript的Object

    题目 var foo = new Object(); var bar = new Object(); var map = new Object(); map[foo] = "foo" ...

  4. luogu P1608 路径统计

    题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...

  5. [TJOI2014] 上升子序列

    刚刚做的时候一看:这不是个傻逼题吗hhhhh....然后发现写完了过不了样例,仔细一看题:同构的算一种. 这可咋办啊? 其实很简单,设f[i] 为 以a[i] 结尾的上升子序列个数,我们考虑当前如果算 ...

  6. [LeetCode] 1.Two Sum 两数之和分析以及实现 (golang)

    题目描述: /* Given an array of integers, return indices of the two numbers such that they add up to a sp ...

  7. ORACLE普通表转换成分区表

    转http://mp.weixin.qq.com/s?__biz=MzAwMjkyMjEwNg==&mid=2247484761&idx=1&sn=ce080581145931 ...

  8. html特殊字符编码问题导致的细节问题

    今天在写前端html时,一个a标签的链接地址,由于链接地址需要给后台传参数,因此带了部分url参数: 在html源码里写的连接地址是: http://域名/bidder/noticesearch?no ...

  9. JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

    Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) ...

  10. fastjson设置生成的json属性的顺序

    目标JSON顺序: {,,} 1.url2.w3.h4.s 如果使用默认情况生成,则顺序为: w,h,s,url 在fastJson中,可以使用@JSONField来指定属性顺序(需要1.1.42以上 ...