iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势)
1、介绍
有的博友看了上篇博文iOS界面-仿网易新闻左侧抽屉式交互 ,在微博里问,网易新闻里的内容和评论的拖拽如何实现,
上面的UINavigation如何嵌进去。可能不少人有这样的需求,现在花了些时间把这两个效果做一下,
和大家分享交流。思路和上篇基本差不多,但是没有用到UINavigation,其实在我看来上面的返回、
评论按钮都是可以通过addsubview添加的。内容页和评论页的手势交互 实现的效果如下:


2、跳转添加


3、部分代码
--
- #import <UIKit/UIKit.h>
- @class CommentView;
- @interface DetailView : UIView
- {
- CommentView *commentView;
- BOOL isPanComment;
- }
- - (id)initWithView:(UIView*)contentView parentView:(UIView*) parentView;
- @property (nonatomic, strong) UIView *parentView; //抽屉视图的父视图
- @property (nonatomic, strong) UIView *contentView; //抽屉显示内容的视图
- @end
- //
- // DetailView.m
- // NeteaseNews
- //
- // Created by rongfzh on 13-3-5.
- // Copyright (c) 2013年 rongfzh. All rights reserved.
- //
- #import "DetailView.h"
- #import "CommentView.h"
- #import <QuartzCore/QuartzCore.h>
- @implementation DetailView
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- // Initialization code
- }
- return self;
- }
- - (id)initWithView:(UIView *)contentView parentView:(UIView *)parentView{
- self = [super initWithFrame:CGRectMake(0,0,contentView.frame.size.width, contentView.frame.size.height)];
- if (self) {
- [self addSubview:contentView];
- UIPanGestureRecognizer *panGestureRecognier = [[UIPanGestureRecognizer alloc]
- initWithTarget:self
- action:@selector(HandlePan:)];
- [self addGestureRecognizer:panGestureRecognier];
- UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- backBtn.frame = CGRectMake(0, 0, 80, 50);
- [backBtn addTarget:self
- action:@selector(back:)
- forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:backBtn];
- UIImageView *imageCommentView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"comment.png"]];
- imageCommentView.frame = CGRectMake(0, 0,
- self.frame.size.width,
- self.frame.size.height);
- commentView = [[CommentView alloc] initWithView:imageCommentView parentView:self];
- commentView.center = CGPointMake(480, 230);
- [[commentView layer] setShadowOffset:CGSizeMake(10, 10)];
- [[commentView layer] setShadowRadius:20];
- [[commentView layer] setShadowOpacity:1];
- [[commentView layer] setShadowColor:[UIColor blackColor].CGColor];
- [self addSubview:commentView];
- isPanComment = NO;
- }
- self.parentView = parentView;
- return self;
- }
- - (void)HandlePan:(UIPanGestureRecognizer*)panGestureRecognizer{
- CGPoint translation = [panGestureRecognizer translationInView:self.parentView];
- float x = self.center.x + translation.x;
- if (x < 160) {
- x = 160;
- }
- if(translation.x > 0){
- if (!isPanComment) {
- self.center = CGPointMake(x, 230);
- }
- }
- if (translation.x < 0 && self.center.x > 160) {
- if (!isPanComment) {
- self.center = CGPointMake(x, 230);
- }
- }else if(translation.x < 0){
- isPanComment = YES;
- commentView.center = CGPointMake(commentView.center.x + translation.x, 230);
- }
- if (commentView.center.x < 480 && translation.x > 0) {
- isPanComment = YES;
- commentView.center = CGPointMake(commentView.center.x + translation.x, 230);
- }
- if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) {
- if (commentView.center.x < 400) {
- [UIView animateWithDuration:0.4
- delay:0.1
- options:UIViewAnimationCurveEaseInOut
- animations:^(void){
- commentView.center = CGPointMake(160, 230);
- }completion:^(BOOL finish){
- isPanComment = NO;
- }];
- }else{
- [UIView animateWithDuration:0.4
- delay:0.1
- options:UIViewAnimationCurveEaseInOut
- animations:^(void){
- commentView.center = CGPointMake(480, 230);
- }completion:^(BOOL finish){
- isPanComment = NO;
- }];
- }
- if (self.center.x > 190) {
- [UIView animateWithDuration:0.4
- delay:0.1
- options:UIViewAnimationCurveEaseInOut
- animations:^(void){
- self.center = CGPointMake(480, 230);
- }completion:^(BOOL finish){
- [self.parentView exchangeSubviewAtIndex:1 withSubviewAtIndex:2];
- }];
- }else{
- [UIView animateWithDuration:0.4
- delay:0.1
- options:UIViewAnimationCurveEaseInOut
- animations:^(void){
- self.center = CGPointMake(160, 230);
- }completion:^(BOOL finish){
- }];
- }
- }
- [panGestureRecognizer setTranslation:CGPointZero inView:self.parentView];
- }
- - (void) back:(id)sender{
- [UIView animateWithDuration:0.4
- delay:0.1
- options:UIViewAnimationCurveEaseInOut
- animations:^(void){
- self.center = CGPointMake(480, 230);
- }completion:^(BOOL finish){
- [self.parentView exchangeSubviewAtIndex:1 withSubviewAtIndex:2];
- }];
- }
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect
- {
- // Drawing code
- }
- */
- @end
3、评论页的view和内容页的代码差不多
代码还有很多值得优化的地方,现在只是展示实现了功能,手势判断部分代码比较乱,只要掌握了手势的原来,代码可以自己根据需求来修改
代码:
Github:https://github.com/schelling/NeteaseNews
iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势)的更多相关文章
- Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)
另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...
- iOS仿网易新闻栏目拖动重排添加删除效果
仿网易新闻栏目选择页面的基本效果,今天抽了点时间教大家如何实现UICollectionView拖动的效果! 其实实现起来并不复杂,这里只是基本的功能,没有实现细节上的修改,连UI都是丑丑的样子,随手画 ...
- Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...
- 类似掌盟的Tab页 Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签 (转)
原博客地址 :http://blog.csdn.net/xiaanming/article/details/10766053 本文转载,记录学习用,如有需要,请到原作者网站查看(上面这个网址) 之前 ...
- Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了能更好的分享高质量的文章,所以开设了此专栏.文章代码都以Android Studio亲测运行,读者朋友可在后面直接下载源码.该专栏 ...
- 动态权限<二>之淘宝、京东、网易新闻 权限申请交互设计对比分析
移动智能设备的快速普及,给生活带来巨大的精彩,但是智能设备上用户的信息数据很多,隐私数据也非常多,各种各样的app可能通过各种方式在悄悄的收集用户数据,而用户的隐私就变得耐人寻味了.比如之前的可以无限 ...
- Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻clientTab标签
之前用JakeWharton的开源框架ActionBarSherlock和ViewPager实现了对网易新闻clientTab标签的功能,ActionBarSherlock是在3.0下面的机器支持Ac ...
- Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...
- 仿网易新闻 ViewPager 实现图片自动轮播
新闻 App 首页最上方一般会循环播放热点图片,如下图所示. 本文主要介绍了利用 ViewPager 实现轮播图片,图片下方加上小圆点指示器标记当前位置,并利用 Timer+Handler 实现了自动 ...
随机推荐
- TeamViewer下载地址
http://www.teamviewer.com/zhCN/download/linux.aspx Ubuntu配置远程访问的xrdp协议和teamviewer软件 先启用远程设置:System-& ...
- 五、Ubuntu 进入vi相关问题
1.进入vi环境:vim 路径 2.编辑vi:按i键即可 3.保存vi:按esc键,输入冒号,输入wq 回车即可 4.遇到readonly相关问题,可先解除readonly:按esc键,输入:set ...
- JMeter 中Random 随机函数的使用
场景:在做接口测试时,比如说要求用户的手机号码不允许重复,那此时可以通过Random 随机函数来解决此问题: 1.在JMeter 工具中,选择{选项-函数助手对话框-} 函数助手中选择 Random ...
- php 开发 错误汇总
[问题]nginx thinkphp中 除首页外全显示404 Not Found,非rewrite问题,Linux+nginx环境 [解决方案]: 1.在nginx下重新支持pathinfo模式 2. ...
- Jenkins连接git时出现“Failed to connect to repository : Command ... HEAD" returned status code 128:”的问题解决
网上说的解决方法如下: 其实生成ssh时不应该使用当前用户去生成ssh,而是使用jenkins这个用户去生成ssh,然后再去git服务器上配置你生成key,最后再jenkins上配置返回给你的key. ...
- perl learning
Perl 中文教程 http://cn.perlmaven.com/perl-tutorial learning perl in about 2 hours 30 minutes http://qnt ...
- iOS7开发技巧
和任何新的iOS版本一样,有着一堆堆的新技巧和修改需要处理.有些我并不会立即遇到,所以这篇文章并不是一套完整技巧汇总.只是分享一些我碰巧遇到的问题. 如果你有任何更多的发现,可以发Twitter或者e ...
- Activity的onRestart()方法调用时机
在项目中看到Activity使用onRestart(),平时对这个方法的调用时机知道的比较少,研究一下它啥时候会被调用. 代码很简单: <span style="font-size:1 ...
- VS2010 MFC中 单独添加ODBC数据库记录集类(CRecordset)方法
基于VS2010 MFC的项目是之前建好的,后来需要添加数据库. 方法分享于此. 1. 打开自己的项目,项目->添加类. 2. 选MFC ODBC使用者,点右下角的添加. 3. 点数据源. / ...
- LeetCode 290 Word Pattern(单词模式)(istringstream、vector、map)(*)
翻译 给定一个模式,和一个字符串str.返回str是否符合同样的模式. 这里的符合意味着全然的匹配,所以这是一个一对多的映射,在pattern中是一个字母.在str中是一个为空的单词. 比如: pat ...