当前位置: 首页 > news >正文

商城网站制作的教程/上海培训机构

商城网站制作的教程,上海培训机构,wordpress 动态主题,阿里云wordpress root转场动画涉及到的包括导航控制器的Push动画和Pop动画,以及普通控制器的Present和Dismiss动画,主要就是通过控制器遵守UIViewControllerTransitioningDelegate,并实现对应的方法,返回一个遵守UIViewControllerAnimatedTransitionin…

转场动画涉及到的包括导航控制器的Push动画和Pop动画,以及普通控制器的Present和Dismiss动画,主要就是通过控制器遵守UIViewControllerTransitioningDelegate,并实现对应的方法,返回一个遵守UIViewControllerAnimatedTransitioning协议的对象,而主要的动画实现就是写在这个对象当中~

__ 如果是Push和pop动画需要再push控制器和pop时的控制器里同时实现导航控制器的代理以实现Push和Pop的动画,而Present和Dismiss动画只需要在Presnent的时候设置代理,并实现present和dismiss的协议方法就OK了 __

__ 为了方便使用,一般会封装代理返回的动画协议对象(UIViewControllerAnimatedTransitioning),通过之类来进一步处理各种各样的转场动画 __

//

// ViewController.m

// transitionDemo

// Copyright © 2016年 SSBun. All rights reserved.

//

#import "ViewController.h"

#import "TwoViewController.h"

#import "PushAnimator.h"

#import "PresentAnimator.h"

#import "DismissAnimator.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

}

- (void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

self.navigationController.delegate = self;

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

TwoViewController *twoVc = [[TwoViewController alloc] init];

// Present

twoVc.transitioningDelegate = self;

twoVc.modalPresentationStyle = UIModalPresentationCustom;

[self presentViewController:twoVc

animated:YES

completion:^{

}];

// Push

// [self.navigationController pushViewController:twoVc animated:YES];

}

#pragma mark - 动画代理

- (id )navigationController:(UINavigationController *)navigationController

animationControllerForOperation:(UINavigationControllerOperation)operation

fromViewController:(UIViewController *)fromVC

toViewController:(UIViewController *)toVC{

if ([toVC isKindOfClass:[TwoViewController class]]) {

PushAnimator *transition = [[PushAnimator alloc] init];

return transition;

}else{

return nil;

}

}

#pragma mark - 定制转场动画 (Present 与 Dismiss动画代理)

- (id)animationControllerForPresentedController:(UIViewController *)presented

presentingController:(UIViewController *)presenting

sourceController:(UIViewController *)source {

// 推出控制器的动画

return [PresentAnimator new];

}

- (id)animationControllerForDismissedController:(UIViewController *)dismissed {

DismissAnimator *dismissAnimator = [DismissAnimator new];

dismissAnimator.transitionDuration = 1.f;

// 退出控制器动画

return dismissAnimator;

}

@end

__ 可以看出协议方法主要时返回了一个遵守协议的对象,所以主要的重点在实现这个对象上 __

// BaseAnimator.h

#import

#import

@interface BaseAnimator : NSObject

/**

* 动画执行时间(默认值为0.5s)

*/

@property (nonatomic) NSTimeInterval transitionDuration;

/**

* == 子类重写此方法实现动画效果 ==

*

* 动画事件

*/

- (void)animateTransitionEvent;

/**

* == 在animateTransitionEvent使用才有效 ==

*

* 源头控制器

*/

@property (nonatomic, readonly, weak) UIViewController *fromViewController;

/**

* == 在animateTransitionEvent使用才有效 ==

*

* 目标控制器

*/

@property (nonatomic, readonly, weak) UIViewController *toViewController;

/**

* == 在animateTransitionEvent使用才有效 ==

*

* containerView

*/

@property (nonatomic, readonly, weak) UIView *containerView;

/**

* 动画事件结束

*/

- (void)completeTransition;

@end

// BaseAnimator.m

#import "BaseAnimator.h"

@interface BaseAnimator ()

@property (nonatomic, weak) id transitionContext;

@property (nonatomic, weak) UIViewController *fromViewController;

@property (nonatomic, weak) UIViewController *toViewController;

@property (nonatomic, weak) UIView *containerView;

@end

@implementation BaseAnimator

#pragma mark - 初始化

- (instancetype)init {

self = [super init];

if (self) {

// 默认参数设置

[self deafultSet];

}

return self;

}

- (void)deafultSet {

_transitionDuration = 0.5f;

}

#pragma mark - 动画代理

- (NSTimeInterval)transitionDuration:(id )transitionContext {

return _transitionDuration;

}

- (void)animateTransition:(id )transitionContext {

self.fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

self.toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

self.containerView = [transitionContext containerView];

self.transitionContext = transitionContext;

[self animateTransitionEvent];

}

- (void)animateTransitionEvent {

/* == 代码示例 ==

UIView *tmpView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

[self.containerView addSubview:self.toViewController.view];

[self.containerView addSubview:tmpView];

[UIView animateWithDuration:self.transitionDuration

delay:0.0f

usingSpringWithDamping:1 initialSpringVelocity:0.f options:0 animations:^{

tmpView.frame = CGRectMake(0, 0, 100, 100);

} completion:^(BOOL finished) {

[tmpView removeFromSuperview];

[self completeTransition];

}];

*/

}

#pragma mark -

- (void)completeTransition {

[self.transitionContext completeTransition:!self.transitionContext.transitionWasCancelled];

}

@end

__ 其中的fromViewController就是准备跳转的控制器,toViewController 就是要跳转到的控制器,containerView是整个动画的画布,需要将要跳转到的控制器的view添加到画布上执行动画,而在animateTransitionEvent中就时具体实现动画的过程了,不要忘了还要返回动画时间,用起来的时候就看各自的发挥了,可以编写子类来实现这个方法~ __

http://www.lbrq.cn/news/1574623.html

相关文章:

  • 深圳企业网站建设专业/地推平台去哪里找
  • android应用开发软件/广告优化师工作内容
  • 政府网站建设总结报告/网络营销概念是什么
  • 怎样去网上接网站建设和小程序的单/郑州seo地址
  • 建立一个做笔记的网站/网络软文
  • 滨州 网站开发/不错宁波seo公司
  • dede企业网站源码/百度站长提交
  • 百度给做网站收费多少/引流推广效果好的app
  • 站群系列服务器做视频网站/怎样做网络销售平台
  • springboot社交网站开发/上海seo推广外包
  • 政府网站建设及建议/电商运营助理
  • 盐城网站开发代理商/深圳网站快速排名优化
  • 建筑网站招聘/淘宝如何提升关键词排名
  • 个人如何接外包项目/seo站内优化教程
  • 这个网站中有网名做会计的吗 了解一下/中国国家培训网官网
  • lnmp一键包wordpress/seo优化上首页
  • 江苏兴力建设集团有限公司网站/百度 官网
  • 公司网站 用 个人备案域名/软文发布推广平台
  • 怎么样自己建设网站/网站推广的途径有哪些
  • 怀化网站建设/百度数据分析工具
  • 制作网站的软件/娄底seo
  • 58.搜房等网站怎么做效果才好/搜索引擎优化的核心是
  • 包包网站建设/手机在线制作网站
  • 佛山微网站建设 天博/广告投放方案
  • 济阳建设局网站/广东seo推广哪里好
  • 网站怎么做微信支付功能/seo服务顾问
  • 0基础 网站建设/合肥seo排名优化公司
  • 莱州市规划建设管理局网站/策划营销
  • 外贸订单网站有哪些/百度ai开放平台
  • 糗百网站开发/腾讯与中国联通
  • 高防CDN和高防IP的各自优势
  • Kubernetes-03:Service
  • ROS2实用工具
  • 【跨服务器的数据自动化下载--安装公钥,免密下载】
  • 面试经典150题[001]:合并两个有序数组(LeetCode 88)
  • 最终章【1】Epson机器人篇