IOS 实现边滑动边缩放的类似qq主界面的页面切换功能
来源:互联网 发布:comparebeyond4 mac 编辑:程序博客网 时间:2024/05/17 01:54
转自http://blog.csdn.net/djl4104804/article/details/45557191
原理:
调用UIView的三个delegate函数(主要正对触摸+滑动操作的回调):
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
第一个函数用来记录滑动的起始点;
第二个函数,用来在滑动中,改变UIView的中心点位置,以及缩放UIView;
第三个函数,对于滑动结束后的处理,主要是未滑过分界线和分界线后,UIView自动滑动到预先设定位置。
TouchEaglView.h
- #import <UIKit/UIKit.h>
- @interface TouchEaglView : UIView
- @property (assign, nonatomic) CGPoint beginpoint;
- @property id delegate;
- @end
下面是向右滑动缩小的UIView子类实现:
TouchEagleView.m- //
- // TouchEaglView.m
- // moveView
- //
- // Created by wangdan on 10/1/14.
- // Copyright (c) 2014 wangdan. All rights reserved.
- //
- #import "TouchEaglView.h"
- @implementation TouchEaglView
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self)
- {
- // Initialization code
- }
- return self;
- }
- - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- UITouch *touch = [touches anyObject];
- self.beginpoint = [touch locationInView:self];
- [super touchesBegan:touches withEvent:event];
- [super bringSubviewToFront:self];
- }
- - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- {
- CGPoint point = [[touches anyObject] locationInView:self];
- float dx = point.x - self.beginpoint.x;
- CGPoint newcenter = CGPointMake(self.center.x + dx, self.center.y);
- if(self.beginpoint.x<10)
- {
- if(dx>0)
- {
- newcenter.x=MIN(self.bounds.size.width*5/4,newcenter.x);
- self.center=newcenter;
- }
- else
- {
- newcenter.x=MAX(self.superview.bounds.size.width/2,newcenter.x);
- self.center=newcenter;
- }
- [UIView animateWithDuration:0.005 animations:^
- {
- self.transform = CGAffineTransformMakeScale(1-(newcenter.x-160)/1920, 1-(newcenter.x-160)/960);
- }completion:^(BOOL finish)
- {
- }];
- }
- NSLog(@"begin size is %f",self.beginpoint.x);
- }
- // zhege shi chumo jieshu ,huamian zidong tan dao youbian
- - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- {
- if(self.center.x>self.superview.bounds.size.width)
- {
- [UIView animateWithDuration:0.2 animations:^
- {
- self.center=CGPointMake(self.bounds.size.width*5/4, self.center.y);
- self.transform = CGAffineTransformMakeScale(0.875, 0.75);
- }completion:^(BOOL finish)
- {
- }];
- }
- else
- {
- [UIView animateWithDuration:0.2 animations:^
- {
- self.center=CGPointMake(self.bounds.size.width/2,self.center.y);
- self.transform = CGAffineTransformMakeScale(1, 1);
- }completion:^(BOOL finish)
- {
- }];
- }
- }
- @end
下面是滑动后的图片:
上图中左边绿色部分,会随着黄色TouchEagleView滑动而右移并且放大,需要单独实现,原理和上面代码类似
0 0
- IOS 实现边滑动边缩放的类似qq主界面的页面切换功能
- IOS 实现边滑动边缩放的类似qq主界面的页面切换功能
- IOS 实现边滑动边缩放的类似qq主界面的页面切换功能
- SlidingPaneLayout实现类似新版QQ主页滑动缩放的功能。
- 使用ViewPager实现几个界面的切换,类似QQ
- 类似QQ界面的实现
- 【web】页面缩放和滑动功能实现的方法总结
- 【转载】类似QQ功能的界面
- 实现类似iOS拍照的按钮滑动功能
- 实现类似浏览器的缩放页面比例
- iOS中QQ登录界面的制作,登录页面和注册页面的切换
- 实现类似QQ聊天列表的segment点击切换tableView的数据功能
- 实现类似QQ记住密码的功能
- QT实现类似QQ的截图功能
- 仿照QQ的左右滑动切换界面的效果
- ViewFlipper实现界面的滑动切换
- 类似QQ的左侧切换
- iOS 类似微信,QQ聊天界面的气泡聊天简单实现Demo
- 详解大端模式和小端模式
- transaction annotation不起作用二
- Nginx优化指南+LINUX内核优化+linux连接数优化+nginx连接数优化
- 手机iphone项-测试崩溃问题总结
- Android读取assets目录下文件数据内容
- IOS 实现边滑动边缩放的类似qq主界面的页面切换功能
- UE4在VS2013中各个编译配置代表意义
- 怎样才是理想的程序员
- linux 系统优化tcp连接
- 基数树(radix tree)
- iOS 开发经典博客
- spring MVC环境 后台使用URL重定向传值,前台URL显示乱码,解决办法
- Python+OpenCV学习(2)---图像的合并与拆分
- android SDK manager 打开后获取不了版本列表