首页 文章 精选 留言 我的

精选列表

搜索[开源协作平台],共10000篇文章
优秀的个人博客,低调大师

iOS第三方开源类库 -- 视图切换 HMGLTransitions

HMGLTransitions 是一套动画演示两个UIView 或 UIViewController之间切换时的过渡效果; GitHub下载地址:https://github.com/Split82/HMGLTransitions 有些情况下我们需要两个视图之间做一个动画过渡的切换,或许系统自带的CATransition和普通动画难以满足我们的需求,此时第三方类库就是一个不错的选择;HMGLTransitions提供五种不错效果,分别是: 3D Right(letf) 、Cloth、Flip right(letf)、Rotate和Doors 以上是GitHub上下载自带的Demo展示的五种效果图,展示了两个UIView 和 两个UIViewController各自之间动画切换(截图中仅展示两个view之间切换),工程目录结构: HMGLTransitions目录下是这个第三方类库所有文件,Transitions文件下是五种动画的实现类,你需要那种动画就需要把那种动画头文件包含进去 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { Switch3DTransition *t1 = [[[Switch3DTransition alloc] init] autorelease]; t1.transitionType = Switch3DTransitionLeft; FlipTransition *t2 = [[[FlipTransition alloc] init] autorelease]; t2.transitionType = FlipTransitionRight; transitionsArray = [[NSArray alloc] initWithObjects: [[[Switch3DTransition alloc] init] autorelease], t1,[[[ClothTransition alloc] init] autorelease], [[[FlipTransition alloc] init] autorelease], t2, [[[RotateTransition alloc] init] autorelease], [[[DoorsTransition alloc] init] autorelease], nil]; transitionsNamesArray = [[NSArray alloc] initWithObjects: @"Switch 3D right", @"Switch 3D left", @"Cloth", @"Flip left", @"Flip right", @"Rotate", @"Doors", nil]; self.transition = [transitionsArray objectAtIndex:0]; } return self; } 初始化视图,并把这五种动画效果存放在transitionsArray数组之中,Switch3DTransition默认向右,FlipTransition默认向左,分别定义了一个t1对象和t2对象,设置t1.transitionType = Switch3DTransitionLeft; t2.transitionType = FlipTransitionRight; 所以transitionsArray存放的是7种效果,对应transitionsNamesArray数组中关于动画其中效果的名字,显示在视图上的UITableViewCell上;两个数组是一一对应的关系; 两个UIView之间的动画过渡切换实现方法 //从View1切换到View2 - (void)switchToView2 { UIView *containerView = view1.superview; [[HMGLTransitionManager sharedTransitionManager] setTransition:transition]; [[HMGLTransitionManager sharedTransitionManager] beginTransition:containerView]; // Here you can do whatever you want except changing position, size or transformation of container view, or removing it from view hierarchy. view2.frame = view1.frame; [view1 removeFromSuperview]; [containerView addSubview:view2]; [[HMGLTransitionManager sharedTransitionManager] commitTransition]; } //从View2切换到View1 - (void)switchToView1 { UIView *containerView = view2.superview; // Set transition [[HMGLTransitionManager sharedTransitionManager] setTransition:transition]; [[HMGLTransitionManager sharedTransitionManager] beginTransition:containerView]; // Here you can do whatever you want except changing position, size or transformation of container view, or removing it from view hierarchy. view1.frame = view2.frame; [view2 removeFromSuperview]; [containerView addSubview:view1]; // Commit transition [[HMGLTransitionManager sharedTransitionManager] commitTransition]; } #pragma mark - #pragma mark ModalController delegate - (void)modalControllerDidFinish:(ModalViewController *)modalController { [[HMGLTransitionManager sharedTransitionManager] setTransition:transition]; [[HMGLTransitionManager sharedTransitionManager] dismissModalViewController:modalController]; } ModalviewController类中定义一个ModalControllerDelegate协议,定义协议方法- (void)modalControllerDidFinish:(ModalViewController*)modalController;实现两个View之间的传值,也就是当我们在UITableViewCell对象上现则哪中过渡效果是的时候,传递HMGLTransition对象transition; [HMGLTransitionManager sharedTransitionManager]使用了单例设计模式 实现两个UIViewController之间的动画切换方法 - (IBAction)viewTransitionButtonPressed:(id)sender { UIButton *button = (UIButton*)sender; // view transition to view1 or view2 depending on actual view if (button.superview == view1) { [self switchToView2]; } else { [self switchToView1]; } } - (IBAction)modalPresentationButtonPressed:(id)sender { [[HMGLTransitionManager sharedTransitionManager] setTransition:transition]; ModalViewController *newController; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { newController = [[ModalViewController alloc] initWithNibName:@"ModalViewController-iPad" bundle:nil]; } else { newController = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil]; } newController.delegate = self; [[HMGLTransitionManager sharedTransitionManager] presentModalViewController:newController onViewController:self]; [newController release]; } 演示一个Demo: 1.新建一个Single View Application模板工程,命名RollingView,将下载下来的工程中里HMGLTransitions文件夹拷贝加入到你的工程目录中,然后添加QuartzCore.framework 和OpenGLES.framework 库 2. File->New->File 添加一个控制器类ViewController2,在ViewController.h中包含头文件 // ViewController.h #import <UIKit/UIKit.h> #import "Switch3DTransition.h" #import "FlipTransition.h" #import "RotateTransition.h" #import "ClothTransition.h" #import "DoorsTransition.h" #import "ViewController2.h" #import "HMGLTransitionManager.h" @interface ViewController : UIViewController { UIButton *startBtn; HMGLTransition *transition; } @end 在ViewController.m中 自定义Button // custom Button - (UIButton *)buttonWithFrame:(CGRect)frame withNormalTitle:(NSString *)title withOtherStateTitle:(NSString *)otherTitle action:(SEL)action { UIImage *buttonBackgroundImage = [[UIImage imageNamed:@"button_background.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:5]; UIImage *disabledButtonBackgroundImage = [[UIImage imageNamed:@"button_background_disabled.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:5]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = frame; [button setTitle:title forState:UIControlStateNormal]; [button setTitle:otherTitle forState:UIControlStateDisabled]; [button setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal]; [button setBackgroundImage:disabledButtonBackgroundImage forState:UIControlStateDisabled]; [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled]; [button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; return button; } - (void)viewDidLoad { [super viewDidLoad]; CGRect butRect = CGRectMake(self.view.bounds.origin.x + 60, self.view.bounds.origin.y + 100, self.view.frame.size.width-60-60, 100); startBtn= [self buttonWithFrame:butRect withNormalTitle:@"View 1" withOtherStateTitle:@"View 1" action:@selector(startView:)]; Switch3DTransition *tran = [[[Switch3DTransition alloc] init] autorelease]; tran.transitionType = Switch3DTransitionLeft; transitionArr = [[NSArray alloc] initWithObjects:[[[DoorsTransition alloc] init] autorelease], nil]; self.transition = [transitionArr objectAtIndex:0]; [HMGLTransitionManager sharedTransitionManager]; } 点击Button实现两个UIViewController之间的动画切换 -(void)startView:(id)sender { [[HMGLTransitionManager sharedTransitionManager] setTransition:transition]; ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil]; [[HMGLTransitionManager sharedTransitionManager] presentModalViewController:vc2 onViewController:self]; } 在ViewController2类中,方法实现基本类似 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { FlipTransition *tran = [[[FlipTransition alloc] init] autorelease]; tran.transitionType = FlipTransitionLeft; transitionArr = [[NSArray alloc] initWithObjects:[[[FlipTransition alloc] init] autorelease], nil]; self.transition = [transitionArr objectAtIndex:0]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; CGRect butRect; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { butRect = CGRectMake(self.view.bounds.origin.x + 60, self.view.bounds.origin.y + 100, 768-60-60, 100); } else { butRect = CGRectMake(self.view.bounds.origin.x + 60, self.view.bounds.origin.y + 100, self.view.frame.size.width-60-60, 100); } endBtn= [self buttonWithFrame:butRect withNormalTitle:@"View 2" withOtherStateTitle:@"View 2" action:@selector(endView:)]; } -(void)endView:(id)sender { [[HMGLTransitionManager sharedTransitionManager] setTransition:transition]; ViewController *vc1; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { vc1 = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; } else { vc1 = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; } [[HMGLTransitionManager sharedTransitionManager] presentModalViewController:vc1 onViewController:self]; } 源码:http://download.csdn.net/detail/duxinfeng2010/5212826 欢迎转载分享,请注明出处http://blog.csdn.net/duxinfeng2010 本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208673,如需转载请自行联系原作者

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

【云栖大会】持续拥抱开源阿里云计算能力三大突破

10月12日,阿里巴巴集团副总裁周靖人在云栖大会上发布了阿里云在大数据计算能力上的新突破:将BigBench数据规模扩展到100T;流计算2.0每秒峰值达千万QPS,整体链路延时亚秒级;E-MapReduce对比同类产品平均性能提升3倍。阿里巴巴集团副总裁周靖人与英特尔公司数据中心事业部副总裁Rob Hays 周靖人说,数据是机器智能创新的基础,拥有充沛的计算能力才能全面释放数据的价值。我们希望通过不断的释放阿里云的计算红利,帮助开发者抓住更多市场机遇。 BigBench全球首次达到100TB TPCx-BigBench是大数据端到端真实复杂的业界领先测试基准,目前,TPC官网公布的测试最大规模为10TB,最佳性能是1491.23BBQpm。 当天,阿里云与Intel合作,在最新的Intel硬件上,基于公共云发布的BigBench On

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册