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

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

1、介绍

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

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

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

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

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

2、跳转添加

网易新闻的按钮都是可点击的,所以在这个例子中除了能通过手势操作。运行例子代码的时候注意下面的内容:

我在代码中添加了一些button,下面图中红色框框里的区域是可点可跳转的:

列表页第一条新闻可点,内容页左上角可点返回,评论页左上角也可点返回。其他部分都是图片。

3、部分代码

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

--

[cpp] view plaincopy

  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

[cpp] view plaincopy

  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界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势)

时间: 2024-10-10 13:45:02

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

iOS界面-仿网易新闻左侧抽屉式交互

1.介绍 用过网易新闻客户端的同学都会发现,网易新闻向左滑动时,左侧的导航栏会跟着拖动出来,新闻内容列表会拉到最右侧.像一个抽屉拉出来一样.很酷.除了网易新闻,现在好多应用都采用了这样的交互. 对手势识别不熟悉的请参考上篇: iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 这个交互效果主要用到两个手势,一个是pan拖拽,一个是tap点击.拖拽可以把抽屉拉出来,再推回去.点击可以把抽屉推回去. 效果如下:     那么这个效果如何实现呢? 2.实现思路和步骤 思路:从实现

Android仿网易客户端实现抽屉式拖拉菜单界面

前面有写过一篇文章使用DrawerLayout实现Android仿网易客户端抽屉模式,昨天从群里看一哥们问抽屉式拖拉,从主界面的下方出现,而使用DrawerLayout实现的是覆盖掉主界面,今天我们就来实现一下主界面下方脱出菜单界面,先上图,方便观看 啊哦,图片好大,开始今天的实现 1.继承HorizontalScrollView,实现自定义控件 package com.sdufe.thea.guo.view; import com.nineoldandroids.view.ViewHelper

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

另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所以适配器不能继承PagerAdapter,而要继承FragmentPagerAdapter,这是在android.support.v4.app.FragmentPagerAdapter包里的.有点奇葩的是,FragmentPagerAdapter仅仅在这个包里有,在android.app.*这个包以

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

第二种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表,使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View,而是Fragment.所以适配器不能继承PagerAdapter,而要继承FragmentPagerAdapter,这是在android.support.v4.app.FragmentPagerAdapter包里的.有点奇葩的是,FragmentPagerAdapter只在这个包里有,在android.app.*这个包下面么

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

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3.0以下呢,google并没有给我提供在3.0以下支持ActionBar的包,但是外国的大牛JakeWharton实现了在3.0以下使用ActionBar, JakeWharton这位大牛是ActionBarSherlock,Android-ViewPagerIndicator ,NineOldAn

iOS高仿微信完整源码,网易爱玩APP源码等

iOS精选源码 iOS一种弹出视图效果带动画 一个快速便捷.无侵入.可扩展的动画弹框库 高仿Elk - 旅行货币转换器 iOS内分享的界面.功能一体化解决方案 使用Olami sdk实现一个语音查询股票的iOS程序 iOS高仿微信完整项目源码 分段绘制折线指示图, 点击效果 最新环信推送封装 v3.0[附代码] 仿照网易爱玩APP APP启动视频 iOS优质博客 iOS 一行代码搞定 KVO 前言发现好久没有研究.学习iOS优秀开源代码,现在大部分时间都在写业务代码, 学习其他语言及一些杂七杂八

关于仿网易新闻中详细页图文混排功能的实现

最近在了解关于新闻内容的图文混排的效果,网上有人开源一个仿网易新闻的代码,本文就是简单记录学习其详细页面显示的效果实现: 下载地址:https://github.com/dsxNiubility/SXNews 效果图: 其原理:通过网络请求获得相关的信息,再通过手机端进行拼HTML,然后在WebView进行展示,此处还对文章中的图片增加点击效果,可以保存到相册中:文章的样式已经存在项目中,直接去调用: 1:首先了解两个相关的实体对象,一个是新闻的主体内容,另外一个就是图片的相关信息实体: 1:主

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

之前用JakeWharton的开源框架ActionBarSherlock和ViewPager实现了对网易新闻客户端Tab标签的功能,ActionBarSherlock是在3.0以下的机器支持ActionBar的功能,有兴趣的可以看看开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端,今天用到的是JakeWharton的另一开源控件ViewPageIndicator,ViewPager想必大家都知道,Indicator指示器的意思,所以ViewPageIndica

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

之前用JakeWharton的开源框架ActionBarSherlock和ViewPager实现了对网易新闻clientTab标签的功能,ActionBarSherlock是在3.0下面的机器支持ActionBar的功能,有兴趣的能够看看开源框架ActionBarSherlock 和 ViewPager 仿网易新闻client,今天用到的是JakeWharton的还有一开源控件ViewPageIndicator.ViewPager想必大家都知道,Indicator指示器的意思,所以ViewPag