你们中的任何一个人都可以在UINavigationController中制作自定义动画,例如从中间展开吗?(例如,从启动器视图中选择新闻源时的Facebook应用)
我看到了一个技巧,如动画所需的下一个控制器的视图,但我使用Three20框架,并获得下一个控制器视图是困难的.
所以我唯一的选择是玩CATransition.我可以设法使用这段代码获得某种接近我想要的动画.
CATransition* transition = [CATransition animation];
transition.duration = 1;
transition.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
transition.subtype = kCATransitionReveal;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
Run Code Online (Sandbox Code Playgroud)
它会做什么?它将为渐变类型的动画制作动画.我想要的是像从CABasicAnimation缩放视图框架.
anim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)];
Run Code Online (Sandbox Code Playgroud)
你们知道怎么做到这一点吗?像CATransition里面的变换动画.
iphone animation uinavigationcontroller three20 catransition
我使用一个很好的方法来解雇我的模态视图控制器:
[self dismissModalViewControllerWithTransition:2];
Run Code Online (Sandbox Code Playgroud)
这使得幻灯片从左向右过渡,就像导航控制器弹出视图一样.
由于此方法是非公开方法,因此Apple不会接受它.如何在我的代码中编程这种动画(从左到右滑动,关闭模态视图,从右到左滑动以呈现模态视图)?
提前致谢
我有一个侧面导航控制器,并通过UIButton呈现它.当我直接将这个NC作为根视图控制器时[self presentviewcontroller: NC animated: YES completion: nil],某些原因NC的菜单面被一个UITransitionView我无法消失的东西阻挡.
我尝试过以下方法:
UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window];
window.backgroundColor = kmain;
CATransition* transition = [CATransition animation];
transition.duration = .5;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromTop;
[nc.view.layer addAnimation:transition forKey:kCATransition];
[UIView transitionWithView:window
duration:0.5
options:UIViewAnimationOptionTransitionNone
animations:^{ window.rootViewController = nc; }
completion:^(BOOL finished) {
for (UIView *subview in window.subviews) {
if ([subview isKindOfClass:NSClassFromString(@"UITransitionView")]) {
[subview removeFromSuperview];
}
}
}];
Run Code Online (Sandbox Code Playgroud)
但它非常hacky,并且随着窗口的rootviewcontroller在转换过程中发生变化,它会有点波动,导航控制器的一部分和右上角变黑.看起来很糟糕.
uiviewcontroller uinavigationcontroller catransition uiviewanimationtransition ios
我通过以下方式为子视图的外观设置了动画:
CATransition *transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionReveal;
[webView.layer addAnimation:transition forKey:nil];
[self.view addSubview:webView];
Run Code Online (Sandbox Code Playgroud)
但现在我想删除我的subView.如何添加动画来执行此操作?像其他CATransition一样?什么时候加?在addSubview之前或之后?
可能是这种类型的问题发生在很多开发者身上,我也试图在Google上找到但是没有运气来解决我的问题.
在我的rootViewController动态窗口设置中,我的意思是用户可以在运行时应用程序中更改根视图.所以,首先我删除当前rootViewController由UIWindow然后我设置新rootViewController的UIWindow特定动画.这个动画所做CATransition用transition.type = kCATransitionPush;.
我的应用程序工作得很好,除了新的动画rootViewController.正如上面我说我用kCATransitionPush用CATransition
编辑: 以下是我的代码:
-(void) changeRootViewController
{
for(UIView *subViews in self.window.rootViewController.view.subviews)
[subViews removeFromSuperview];
[self.window.rootViewController.view removeFromSuperview];
self.window.rootViewController.view = nil;
[self.window.rootViewController removeFromParentViewController];
MainRootViewController *mainRootVC = [[MainRootViewController alloc] init];
CATransition *animation = [CATransition animation];
[animation setDuration:0.4];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
animation.fillMode = kCAFillModeForwards;
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
self.window.rootViewController = mainRootVC;
[[self.window layer] addAnimation:animation forKey:nil];
}
Run Code Online (Sandbox Code Playgroud)
我也尝试设置clearColor和whiteColor背景UIWindow.但不工作. …
我想使用Swift推动一个视图控制器并为其设置动画,使其从底部显示并向上移动.我有以下代码来推动我的视图控制器:
let helloTableViewController = self.storyboard!.instantiateViewControllerWithIdentifier("helloTableViewController") as! HelloTableViewController
self.navigationController!.pushViewController(helloTableViewController, animated: true)
Run Code Online (Sandbox Code Playgroud)
我从另一个问题中找到了以下内容,但似乎无法在Swift中使用它:
CATransition *animation = [CATransition animation];
[animation setDuration:2];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromTop];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
SecondView *sObj=[[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
[self.navigationController pushViewController:sObj animated:YES];
[[sObj.view layer] addAnimation:animation forKey:@"SwitchToView1"];
Run Code Online (Sandbox Code Playgroud) 我正在尝试做半页卷曲功能.这是我正在使用的代码:
#import <QuartzCore/QuartzCore.h>
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setDuration:1.0f];
[animation setTimingFunction:UIViewAnimationCurveEaseInOut];
[animation setType:(notCurled ? @"mapCurl" : @"mapUnCurl")];
[animation setRemovedOnCompletion:NO];
[animation setFillMode: @"extended"];
[animation setRemovedOnCompletion: NO];
notCurled = !notCurled;
Run Code Online (Sandbox Code Playgroud)
但是我遇到了以下错误
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_CATransition", referenced from:
objc-class-ref in MyMapViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
"_OBJC_CLASS_$_CATransition", referenced from:
objc-class-ref in SJMapViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker …Run Code Online (Sandbox Code Playgroud) 我试图动画我视角的四舍五入.cornerRadius属性被列为可动画,但我似乎无法让它工作.我实际上也无法获得任何其他属性的动画,但角落是我感兴趣的.这是我的代码,它非常简单:
[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithFloat: 2.0f] forKey:kCATransactionAnimationDuration];
self.myView.layer.cornerRadius = 50.0f;
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
我在这里想念的是什么?角落变圆,但它是瞬间而不是2秒钟.
我正在使用CATransition来滑动UIView的子视图.但问题是CATransition总是出现在整个屏幕上.它看起来像一团糟,因为我在窗口中有另一个UI元素,在转换时会重叠.如何通过UIView框架限制过渡帧?我试图将我的UIView的clipToBounds设置为YES.实际上它并没有帮助.
我想要做的是为我的模态呈现视图控制器创建自定义过渡效果(仅用于解除它).我只是希望它看起来像原始但更慢.问题是我的模态呈现VC和VC之间的黑色阴影我想回去.
到目前为止,这是我的代码:
let transition: CATransition = CATransition()
transition.duration = 0.6
transition.type = kCATransitionReveal
transition.subtype = kCATransitionFromBottom
self.view.window!.layer.add(transition, forKey: nil)
self.dismiss(animated: false, completion: nil)
Run Code Online (Sandbox Code Playgroud) catransition ×10
ios ×6
animation ×5
iphone ×4
objective-c ×2
swift ×2
cocoa-touch ×1
ios4 ×1
page-curl ×1
three20 ×1
uiview ×1