首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

ios开发——仿新版iBooks书本打开与关闭动画

IOS新版iBooks吸引人的地方除了有干净整洁的界面、方便灵活的操作以及大容量的书籍容量以外。还有其优秀的用户交互,尤其是其动画的使用。打开一本书时书本缓慢放大并打开。关闭一本书后书本关闭并回到原位置。 如今我们来实现这个简单的功能。 效果图: 用到的知识: 1、CAKeyframeAnimation的应用 2、怎样在代理中区分两个不同的动画 3、坐标系转换 思路: 这个动画主要用到的是CAAnimation,而且是CAKeyframeAnimation。当用户点击书本时。设置一个UIImageView(为其加上tag方便以后取)并将其放在选中书本的位置上(使用坐标系转换)。接着通过动画将其放大到全屏,完毕后将其锚点设置为(0,0.5)并让其绕y轴选中π/2角度,将早已放在以下的textView(本app中是自己定义的readView)展示出来。 动画完毕后将UIImageView的透明度设为0。这样就是书本的打开过程。 关闭过程类似,依据tag取出UIImageView并将其旋转,然后设置frame到原来书本的位置(能够用私有变量记录该位置),最后removeFromSuperview就可以。 代码: 首先是“准备阶段” //BookReadView是展示textView和顶部底部附加view的自己定义view CYZBookItemView *itemView = [notification object]; CYZBookReadView *readView = [[CYZBookReadView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, self.view.height) ItemView:itemView]; //设置delegate是为了当用户从阅读界面返回时做出响应 readView.delegate = self; //先将其alpha设为0防止用户刚点击书本动画还在进行中时就出现这一界面 readView.alpha = 0.0f; [self.view addSubview:readView]; //展示动画的UIImageView UIImageView *showView = [[UIImageView alloc] initWithImage:itemView.bookImage.currentBackgroundImage]; //坐标系转换 _itemPosition = [itemView.superview convertRect:itemView.frame toView:self.view]; showView.frame = _itemPosition; //设置tag方便以后取出 showView.tag = 1001; showView.backgroundColor = [UIColor clearColor]; [self.view addSubview:showView]; 关于坐标系转换( 以矩形为例。point类似): - (void)convertRect:toView:方法: 格式[被转换者所在的ViewconvertRect:被转换者的frame或boundstoView:转换到的View];返回在目标View中的rect 比如,将当前视图的子视图viewA中的一个imageView转换到当前视图。 能够例如以下调用: [viewA convertRect:viewA.imageView.frame toRect:self.view]; 或者[imageView.superView convertRect:imageView.frame toRect:self.view]; 当中self指控制器。 - (void)convertRect:fromView:方法: 格式[要转换到的ViewconvertRect:被转换者的frame或boundsfromView:被转换者所在的View];返回在目标View中的rect。 还是上一个样例,能够这样写: [self.view convertRect:viewA.imageView.frame fromView:viewA]; 或者[self.view convertRect:imageView.frame fromView:imageView.superView]; 当中self指控制器 接着准备工作完毕了以后就能够開始动画了。 一下是打开动画的部分 [UIView animateWithDuration:0.5f animations:^{ //将UIImageView放大为全屏 showView.frame = self.view.bounds; } completion:^(BOOL finished) { if (finished) { //展示出readView readView.alpha = 1.0f; //设置锚点 showView.layer.anchorPoint = CGPointMake(0, 0.5); #warning 不知道为什么,不加以下这句话showView会显示异常:即仅仅显示一半 showView.frame = CGRectMake(0, 0, showView.width, showView.height); CAKeyframeAnimation *animation = [CAKeyframeAnimation animation]; //设置其绕y轴旋转 animation.keyPath = @"transform.rotation.y"; //设置持续时间。能够定义一常量来表示 animation.duration = 0.5f; animation.speed = 0.55f; animation.removedOnCompletion = NO; //旋转π/2度 [animation setValues:[NSArray arrayWithObjects:@0.0f, @-M_PI_2, nil]]; //设置代理便于回调 animation.delegate = self; //这里必须设置上key,为了接下来区分不同动画 [showView.layer addAnimation:animation forKey:@"rotateToOpenBook"]; } }]; 代码中凝视已经解释得比較具体了,仅仅只是正如warning写得那样。本来我是用showView.layer.transform来实现动画的,这样会省非常多事。比方不用在代理中区分动画、不用记录position来在方法间传值等,只是不知道为什么showView总是仅仅显示一半。求解释╮(╯▽╰)╭ 回调中: [showView setAlpha:0.0f]; 将其临时隐藏。关上书时还要用它。 关上书的动画大致类似 #pragma mark - CYZBookViewDelegate - (void)readViewDidBackWithItem:(CYZBookItemView *)item { //取出showView UIImageView *showView = (UIImageView *)[self.view viewWithTag:1001]; //将其显示出来 showView.alpha = 1.0f; showView.layer.anchorPoint = CGPointMake(0, 0.5f); showView.frame = CGRectMake(0, 0, showView.width, showView.height); CAKeyframeAnimation *animation = [CAKeyframeAnimation animation]; animation.keyPath = @"transform.rotation.y"; animation.duration = 0.5f; animation.speed = 0.55f; animation.removedOnCompletion = NO; //反向旋转 [animation setValues:[NSArray arrayWithObjects:@-M_PI_2, @0, nil]]; animation.delegate = self; //设置不同的key为了区分动画用 [showView.layer addAnimation:animation forKey:@"rotateToCloseBook"]; } 这里要用一个不同的key来表示这个动画。 该动画的回调: [UIView animateWithDuration:0.5f animations:^{ showView.frame = _itemPosition; } completion:^(BOOL finished) { [showView removeFromSuperview]; }]; _itemPosition是之前用来记录转换的坐标的私有变量,这几行代码的意思就是让showView回到书本的位置然后令其消失。 这里的关键问题在于。两个动画都用到了回调,怎样区分呢?就用我们之前设置的key来区分: 回调的完整代码: #pragma mark - AnimationDelegate - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { UIImageView *showView = (UIImageView *)[self.view viewWithTag:1001]; if (flag) { if (showView && [[showView.layer animationForKey:@"rotateToOpenBook"] isEqual:anim]) { [showView setAlpha:0.0f]; } else if (showView && [anim isEqual:[showView.layer animationForKey:@"rotateToCloseBook"]]) { [UIView animateWithDuration:0.5f animations:^{ showView.frame = _itemPosition; } completion:^(BOOL finished) { [showView removeFromSuperview]; }]; } } } 通过showView所在层layer的方法 animationForKey:获得自己设置的动画,与代理中的anim做比較就可以区分。 另外。在stackOverflow上还看到一种方法:用kvc的方法为animation设值,并在代理中通过kvc的方法依据这个键取出值并进行推断,应该也是能够的。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5360373.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

ios开发学习-指示器(HUD)效果源码分享

Spring LoadedView 介绍:实现特殊动画效果的Loading HUD (加载等待提示)。这种Loading HUD在最近比较火的 App LetterPress(一款拼字游戏)中用到。http://ios.itmdc.com/forum.php?mod=viewthread&tid=192&fromuid=15SGInfoAlert 介绍:显示一些信息然后自动消失的HUD,在不需要用户点击确定或者取消来关闭弹出对话框的时候,可以用于代替UIAlertView。http://ios.itmdc.com/forum.php?mod=viewthread&tid=193&fromuid=15DejalActivityView 介绍:实现多种HUD效果。多用于程序正在执行耗时较长命令,需要用户等待。除了显示等待的HUD,还可以显示命令执行成功或者失败的HUD。http://ios.itmdc.com/forum.php?mod=viewthread&tid=194&fromuid=15SVProgressHUD 介绍:实现多种HUD效果。多用于程序正在执行耗时较长命令,需要用户等待。除了显示等待的HUD,还可以显示命令执行成功或者失败的HUD。只支持ARC。http://ios.itmdc.com/forum.php?mod=viewthread&tid=195&fromuid=15Status HUD 介绍:实现多种HUD效果,但是只实现硬件或者其他重要的状态指示的HUD。比如锁定方向、静音、声音调整、网络状态等等。 http://ios.itmdc.com/forum.php?mod=viewthread&tid=196&fromuid=15Customized Progress HUD 介绍:实现各种HUD效果,包括在HUD上加文字,加进度条,加图片,HUD自动消失等等效果http://ios.itmdc.com/forum.php?mod=viewthread&tid=197&fromuid=15Progress HUD 介绍:实现多种HUD效果。实现多种正在加载(loading)、命令正在执行、等待任务完成等指示效果。http://ios.itmdc.com/forum.php?mod=viewthread&tid=198&fromuid=15 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2012/11/25/2787303.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

ios开发学习-网络(Networking) 效果源码分享--系列教程

Reachability 介绍:判断设备网络连接情况。相对于苹果官方的Reachability,这是一个更加高级、更加好用的Reachability,支持ARC、支持block、使用GCD方式来通知网络的变化。http://ios.itmdc.com/thread-1727-1-1.html photo批量上传ftp 介绍:将照片批量上传ftp服务器http://ios.itmdc.com/thread-1728-1-1.html AFResumingDownload 介绍:使用最新的AFNetworking库和AFDownloadRequestOperation实现了断点续传下载。http://ios.itmdc.com/thread-1731-1-1.html 数据请求和xml解析 介绍:实现网络数据请求(利用ASIHTTPRequest),然后利用NSXMLParser解析 XML 数据,最后把数据存放到table中。http://ios.itmdc.com/thread-1733-1-1.html MKNetworkKit 介绍:MKNetworkKit 是一个使用十分方便,功能又十分强大、完整的iOS网络编程代码库。它的目标是使用像AFNetworking这么简单,而功能像ASIHTTPRequest那么强大http://ios.itmdc.com/thread-1736-1-1.html AFNetworking 介绍:AFNetworking是一个轻量级的iOS网络通信类库。它建立在NSURLConnection和NSOperation等类库的基础上,让很多网络通信功能的实现变得十分简单。它支持HTTP请求和基于REST的网络服务(包括GET、POST、 PUT、DELETE等)。支持ARC。http://ios.itmdc.com/thread-1737-1-1.html AHReach 介绍:实现动态检测网络(wifi)状况,不需要用户手动刷新,便可通知用户网络状态的变化。支持ARC。http://ios.itmdc.com/thread-1740-1-1.html 简单xml解析demo 介绍:使用iphoneSDK官方NSXMLParserDelegate做的简单xml解析,附带详细注释以及使用到的方法的详细解释,非常适合新手参考。http://ios.itmdc.com/thread-1743-1-1.html Hayate 介绍:一款基于ASIHttpReques开源的仿迅雷多线程断点续传功能的客户端,内置了百度音乐盒、土豆视频下载,新手可以学习ASIHttpRequest网络请求下载、JSON解析等操作。http://ios.itmdc.com/thread-1747-1-1.html ASIHTTPRequest 介绍:ASIHTTPRequest是iOS网络编程的利器。它封装了CFNetwork API,让很多网络通信功能的实现变得十分简单。它支持HTTP请求和基于REST的网络服务(包括GET、POST、 PUT、DELETE等)http://ios.itmdc.com/thread-1750-1-1.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2012/12/08/2809236.html ,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册