本文转载至  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. iptables介绍iptables和netfilter

    随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击.黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视.网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络 ...

  2. AC日记——营业额统计 codevs 1296 (splay版)

    营业额统计 思路: 每次,插入一个点: 然后找前驱后继: 来,上代码: #include <cmath> #include <cstdio> #include <iost ...

  3. BZOJ 3083 遥远的国度 (换根讨论 + 树链剖分)

    题目链接  BZOJ3083 换根不能真正地换. 令当前的根为$cnt$,要查找的子树根为$x$ $1$.$x = cnt$,那么要查找的区域就是整棵树. $2$.$x$在以$cnt$为根的子树内,那 ...

  4. tomcat7.0.55配置HTTP强制跳转到HTTPS

    首先需要配置好HTTPS单向或双向链接 参考: tomcat7.0.55配置单向和双向HTTPS连接(二) 然后编辑tomcat的conf目录下的web.xml 在<welcome-file-l ...

  5. centos 7 mysql 离线安装教程

    1. 解压下载的zip包,会发现有以下几个rpm包: MySQL-client-advanced-5.6.22-1.el7.x86_64.rpm MySQL-devel-advanced-5.6.22 ...

  6. ubuntu下C/C++编程起步

    1. 安装VMware虚拟机软件 2. 在VMware中安装linux系统,这里安装的是Ubuntu.(用 VMware 安装 Ubuntu 12.04详细过程图解) 3. ubuntu有自带文本编辑 ...

  7. 区间最小值(2) (线段树 更新区间)2015年 JXNU_ACS 算法组暑假第一次周赛

    区间最小值(2) Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Subm ...

  8. EXCEL最大行数问题:org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1700)

    今天在使用POI导出数据时,出现如下错误: ES查询阅读推荐比: resList: start: 写入excel Exception in thread "main" java.l ...

  9. DevExpress控件之TreeList

    基于v18.1 使用AppendNode方法手动赋值时,首先要添加treeListColumn 默认样式                                     修改后的样式   1 ...

  10. 0x…… is not a valid instance ID怎么解决

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...