gpt4 book ai didi

iPhone - 设计我自己的 viewController 转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:50 25 4
gpt4 key购买 nike

我的应用有一堆 viewController,我正在尝试设计我自己的从一个 viewController 到另一个 viewController 的动画过渡。

我找到了

- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

但这似乎不允许设计我自己的过渡曲线。

我想要的是在新的 viewControllers 到达最终位置时创建诸如弹性弹跳之类的效果。我喜欢将自己的关键帧添加到动画曲线。

我该怎么做?

谢谢

最佳答案

如果您想设计自己的过渡,您可以为 UIViewController 创建一个类别并自己编写动画。目前只有基本动画可用。

这就是你可以做的界面:

*.h文件:

#import <UIKit/UIKit.h>

@interface UIViewController(Transitions)

- (void) presentViewController:(UIViewController *)viewController withPushDirection: (NSString *) direction;
- (void) dismissViewControllerWithPushDirection:(NSString *) direction;

@end

*.m文件

#import "UIViewControllerWithTransitions.h"
#import <QuartzCore/QuartzCore.h>

@implementation UIViewController(Transitions)

- (void) presentViewController:(UIViewController *)viewController withPushDirection: (NSString *) direction {

[CATransaction begin];

CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = direction;
transition.duration = 0.25f;
transition.fillMode = kCAFillModeForwards;
transition.removedOnCompletion = YES;

[[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"];
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[CATransaction setCompletionBlock: ^ {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
});
}];

[self presentViewController:viewController animated:NO completion:NULL];

[CATransaction commit];

}

- (void) dismissViewControllerWithPushDirection:(NSString *) direction {

[CATransaction begin];

CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = direction;
transition.duration = 0.25f;
transition.fillMode = kCAFillModeForwards;
transition.removedOnCompletion = YES;

[[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"];
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[CATransaction setCompletionBlock: ^ {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
});
}];

[self dismissViewControllerAnimated:NO completion:NULL];

[CATransaction commit];

}

@end

这是一个示例调用:

[self presentViewController: myVC withPushDirection:@"fromRight"]; 

关于iPhone - 设计我自己的 viewController 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12568837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com