IOS 实现边滑动边缩放的类似qq主界面的页面切换功能

2024-06-04 06:48

本文主要是介绍IOS 实现边滑动边缩放的类似qq主界面的页面切换功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自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

[cpp]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2.   
  3.   
  4. @interface TouchEaglView : UIView  
  5.   
  6.   
  7. @property (assign, nonatomic) CGPoint beginpoint;  
  8.   
  9. @property id delegate;  
  10.   
  11. @end  


下面是向右滑动缩小的UIView子类实现:

TouchEagleView.m

[cpp]  view plain copy
  1. //  
  2. //  TouchEaglView.m  
  3. //  moveView  
  4. //  
  5. //  Created by wangdan on 10/1/14.  
  6. //  Copyright (c) 2014 wangdan. All rights reserved.  
  7. //  
  8.   
  9. #import "TouchEaglView.h"  
  10.   
  11. @implementation TouchEaglView  
  12.   
  13.   
  14. - (id)initWithFrame:(CGRect)frame  
  15. {  
  16.   
  17.     self = [super initWithFrame:frame];  
  18.     if (self)  
  19.     {  
  20.         // Initialization code  
  21.     }  
  22.     return self;  
  23.       
  24.       
  25. }  
  26.   
  27.   
  28.   
  29. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
  30. {  
  31.       
  32.     UITouch *touch = [touches anyObject];  
  33.     self.beginpoint = [touch locationInView:self];  
  34.     [super touchesBegan:touches withEvent:event];  
  35.     [super bringSubviewToFront:self];  
  36.       
  37.       
  38. }  
  39.   
  40.   
  41.   
  42. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event  
  43. {  
  44.   
  45.     CGPoint point = [[touches anyObject] locationInView:self];  
  46.     float dx = point.x - self.beginpoint.x;  
  47.     CGPoint newcenter = CGPointMake(self.center.x + dx, self.center.y);  
  48.       
  49.     if(self.beginpoint.x<10)  
  50.     {  
  51.         if(dx>0)  
  52.         {  
  53.               newcenter.x=MIN(self.bounds.size.width*5/4,newcenter.x);  
  54.               self.center=newcenter;  
  55.         }  
  56.         else  
  57.         {  
  58.             newcenter.x=MAX(self.superview.bounds.size.width/2,newcenter.x);  
  59.             self.center=newcenter;  
  60.         }  
  61.       
  62.         [UIView animateWithDuration:0.005 animations:^  
  63.          {  
  64.              self.transform = CGAffineTransformMakeScale(1-(newcenter.x-160)/1920, 1-(newcenter.x-160)/960);  
  65.          }completion:^(BOOL finish)  
  66.          {  
  67.                
  68.          }];  
  69.     }  
  70.     NSLog(@"begin size is %f",self.beginpoint.x);  
  71.       
  72. }  
  73.   
  74.   
  75.   
  76. // zhege shi chumo jieshu ,huamian zidong tan dao youbian  
  77. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event  
  78. {  
  79.     if(self.center.x>self.superview.bounds.size.width)  
  80.     {  
  81.          
  82.         [UIView animateWithDuration:0.2 animations:^  
  83.          {  
  84.             self.center=CGPointMake(self.bounds.size.width*5/4, self.center.y);  
  85.             self.transform = CGAffineTransformMakeScale(0.875, 0.75);  
  86.          }completion:^(BOOL finish)  
  87.          {  
  88.                
  89.          }];  
  90.           
  91.     }  
  92.     else  
  93.     {  
  94.           
  95.         [UIView animateWithDuration:0.2 animations:^  
  96.          {  
  97.              self.center=CGPointMake(self.bounds.size.width/2,self.center.y);  
  98.              self.transform = CGAffineTransformMakeScale(1, 1);  
  99.          }completion:^(BOOL finish)  
  100.          {  
  101.                
  102.          }];  
  103.     }  
  104.       
  105. }  
  106.   
  107.   
  108.   
  109.   
  110. @end  
下面是滑动前的TouchEagleView 显示


下面是滑动后的图片:



上图中左边绿色部分,会随着黄色TouchEagleView滑动而右移并且放大,需要单独实现,原理和上面代码类似


这篇关于IOS 实现边滑动边缩放的类似qq主界面的页面切换功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029357

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

JavaScript全屏,监听页面是否全屏

在JavaScript中,直接监听浏览器是否进入全屏模式并不直接支持,因为全屏API主要是关于请求和退出全屏模式的,而没有直接的监听器可以告知页面何时进入或退出全屏模式。但是,你可以通过在你的代码中跟踪全屏状态的改变来模拟这个功能。 以下是一个基本的示例,展示了如何使用全屏API来请求全屏模式,并在请求成功或失败时更新一个状态变量: javascriptlet isInFullscreen =

iOS HTTPS证书不受信任解决办法

之前开发App的时候服务端使用的是自签名的证书,导致iOS开发过程中调用HTTPS接口时,证书不被信任 - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAu

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

Android我的二维码扫描功能发展史(完整)

最近在研究下二维码扫描功能,跟据从网上查阅的资料到自己勉强已实现扫描功能来一一介绍我的二维码扫描功能实现的发展历程: 首页通过网络搜索发现做android二维码扫描功能看去都是基于google的ZXing项目开发。 2、搜索怎么使用ZXing实现自己的二维码扫描:从网上下载ZXing-2.2.zip以及core-2.2-source.jar文件,分别解压两个文件。然后把.jar解压出来的整个c