热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS入门46高级动画

概述 几种3D效果的动画,这里成为高级动画。高级动画的实现原理是利用OPENGL来完成的,具体的矩阵变化是图形学内容涉及到高数,这里不做展开说明&#xff0c
概述

几种3D效果的动画,这里成为高级动画。高级动画的实现原理是利用OPENGL来完成的,具体的矩阵变化是图形学内容涉及到高数,这里不做展开说明,只是使用。

示例

要做的准备工作


  • 引入第三方动画库HMGLTransitions(用CocoaPods引入依赖,具体操作请参看前面的文章)
  • 添加三个核心库:CoreGraphics.framework、OpenGLES.framework、QuartzCore.gramework
    添加各个库依赖之后如下图:
    在这里插入图片描述

先看效果图

switch3d:
在这里插入图片描述
door
在这里插入图片描述

cloth
在这里插入图片描述

示例代码


ViewController.h

#import @interface ViewController : UIViewController
{//一个父控件和两个字控件UIView* _parentView;UIImageView* _imgV01;UIImageView* _imgV02;
}@end

ViewController.m

#import "ViewController.h"
//动画管理类
#import
//开门3d动画类型
#import
//画布动画类型
#import
//3d变换动画类型
#import @interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view._parentView = [UIView new];_parentView.frame = CGRectMake(50, 50, 300, 500);_parentView.backgroundColor = [UIColor yellowColor];_imgV01 = [UIImageView new];UIImage* image01 = [UIImage imageNamed:@"timg_1.jpg"];_imgV01 = [[UIImageView alloc] initWithImage:image01];_imgV01.frame = CGRectMake(0, 0, 300, 500);UIImage* image02 = [UIImage imageNamed:@"timg_2.jpg"];_imgV02 = [[UIImageView alloc] initWithImage:image02];_imgV02.frame = CGRectMake(0, 0, 300, 500);[_parentView addSubview:_imgV01];[self.view addSubview:_parentView];
}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//实例化动画管理器HMGLTransitionManager* manager = [HMGLTransitionManager sharedTransitionManager];//实例化3d动画对象(动画时间是固定的,不能我们手动调整)//Switch3DTransition* sAnim = [Switch3DTransition new];//设置动画的方向类型//[sAnim setTransitionType:Switch3DTransitionRight];//开门动画//DoorsTransition* dAnim = [DoorsTransition new];//类型:开门/关门//[dAnim setTransitionType:DoorsTransitionTypeOpen];//画布类型动画ClothTransition* cAnim = [ClothTransition new];//动画添加到动画管理器[manager setTransition:cAnim];//将目标view添加到动画管理器中,注意这里是给父控件添加动画[manager beginTransition:_parentView];static BOOL isFirst = YES;if (isFirst) {//让第一个view消失[_imgV01 removeFromSuperview];//设置第二个view的位置大小为第一个view的_imgV02.frame = _imgV01.frame;//将第二个view添加到父控件中[_parentView addSubview:_imgV02];}else{[_imgV02 removeFromSuperview];_imgV01.frame = _imgV02.frame;[_parentView addSubview:_imgV01];}isFirst = !isFirst;//执行动画[manager commitTransition];
}@end


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  •  项目地址https:github.comffmydreamWiCar界面做的很难看,美工方面实在不在行。重点是按钮触摸事件的处理,这里搬了RepeatListener项目代码,例 ... [详细]
  • IOS 获取点击的点在屏幕上的坐标,获取某个view在屏幕上的位置
    2019独角兽企业重金招聘Python工程师标准获取点击事件的点相对于屏幕的位置   如果点击事件是如下这个方法(将UIEvent当做参数传回来)-(void)expandB ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • 涉及的知识点-ViewGroup的测量与布局-View的测量与布局-滑动冲突的处理-VelocityTracker滑动速率跟踪-Scroller实现弹性滑动-屏幕宽高的获取等实现步 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了10分钟了解Android的事件分发相关的知识,希望对你有一定的参考价值。什么是事件分发?大家 ... [详细]
  • jsappsugar,基于,js,语法,定义 ... [详细]
author-avatar
白羊座的张康安_3z2_381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有