NavigationControllers具有ViewController堆栈来管理和限制动画过渡.
将视图控制器作为子视图添加到现有视图控制器需要将事件传递给子视图控制器,这很难管理,几乎没有烦恼,并且通常在实现时感觉像是一个糟糕的黑客(Apple也建议不要这样做).
呈现模式视图控制器再次将视图控制器放在另一个上面,虽然它没有上面描述的事件传递问题,但它并没有真正"交换"视图控制器,而是堆叠它.
故事板仅限于iOS 5,几乎是理想的,但不能在所有项目中使用.
有人可以在没有上述限制的情况下更改视图控制器的方式提供一个SOLID代码示例,并允许它们之间的动画过渡?
一个接近的例子,但没有动画: 如何在没有导航控制器的情况下使用多个iOS自定义视图控制器
编辑:导航控制器使用很好,但需要动画过渡样式(不仅仅是幻灯片效果),显示的视图控制器需要完全交换(不是堆叠).如果第二个视图控制器必须从堆栈中删除另一个视图控制器,那么它的封装不够.
编辑2:iOS 4应该是这个问题的基本操作系统,我应该在提到故事板时澄清(上图).
我想在我的iphone应用程序中"弹出"一个图像,而不是只是出现.通过"pop-in"我的意思是它会从一个小点增长到它的实际大小.作为参考,这与Keynote中的"pop"动画效果完全相同.我对iOS动画完全不熟悉,所以如果有人能指出我需要使用的动画效果的方向,我将非常感激.
谢谢
布赖恩
更新 我从下面的建议中添加了此代码.这可以工作,但它可以缩小我的图像,而不是向上.我知道这是因为我有0.01作为变换比例尺寸,但我想知道如何开始使用大小为0.0的图像并将其缩放到1.只需将图像的大小设置为0?谢谢
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: 0.2];
image.transform = CGAffineTransformMakeScale(0.01, 0.01);
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud) 我在这里有一个UIScrollView我在屏幕中间添加了一个标签,当用户滚动到一个页面时,问题是当动画进行时用户无法滚动到下一页(所有用户)在动画结束之前,似乎已禁用交互.
这是我显示标签的代码.
if(!scrollView.dragging)
[UIView animateWithDuration:0.3
delay:0.3
options:UIViewAnimationOptionCurveEaseOut
animations:^(void){
[vesselNameLabel setFrame:frame];
}
completion:^(BOOL finished){}];
Run Code Online (Sandbox Code Playgroud)
那么我如何在滚动视图中摆脱这种取消用户交互?
我正在研究UIButton动画,其中:
它UIButton
位于屏幕的底部中央,缩小为小尺寸
_menuBtn.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
Run Code Online (Sandbox Code Playgroud)
当应用程序启动时,它应该移动到屏幕的左下方,因为它会缩放或增长到原始大小.
- (void)viewDidLoad
{
[super viewDidLoad];
_menuBtn.frame = CGRectMake(160, 513, 30, 30);
_menuBtn.superview.frame = CGRectMake(160, 513, 30, 30);
_menuBtn.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
NSLog(@"_menuBtn: %@ ; _menuBtn.superview: %@", _menuBtn, _menuBtn.superview);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f);
CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(-200.0f,0.0f);
_menuBtn.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans);
[UIView commitAnimations];
}
Run Code Online (Sandbox Code Playgroud)
问题
当动画开始时,按钮开始从屏幕的右下方开始移动,而不是在它应该是的底部中心.有帮助吗?
记录结果
NSLog(@"%@", _myBtn);
2013-08-14 09:22:38.913 GJCoolNavi[339:c07] <UIButton: 0x813ea30; frame = (0 0; 0 0); opaque = …
Run Code Online (Sandbox Code Playgroud) iOS7动画的行为与iOS6中的行为不同.它们似乎使用不同的贝塞尔曲线.iOS6使用一种"easeInOutSine"曲线,iOS7更像是"easeInOutExpo"类型.(http://matthewlein.com/ceaser/)
有没有办法使用那条曲线?我想在键盘打开/关闭时同步我的动画.
我在我的项目中有这个代码:
- (void) fadeImageView {
[UIView animateWithDuration:1.0f
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^{
self.imageView.alpha = 0.0f;
}
completion:^(BOOL finished) {
//make the image view un-tappable.
//if the fade was canceled, set the alpha to 1.0
}];
}
Run Code Online (Sandbox Code Playgroud)
但是,有时我想在imageview变得不可见之前取消此操作.有没有办法取消动画中期动画?
如何在曲线路径中设置动画/移动视图,是否可以使用UIAnimation.
就像在图像中移动路径中的视图一样.
在Safari中滚动内容时,标题栏会动画显示其自身的较小版本.实现这个的最佳方法是什么?
目前,我正在改变框架的大小,如下所示:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//
// Table view
//
CGFloat currentPosition = scrollView.contentOffset.y - CGRectGetHeight(self.tableView.tableHeaderView.frame) + CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]);
if ([scrollView isKindOfClass:[HeadlinesHeadlinesTableView class]]) {
ScrollDirection scrollDirection;
if (self.lastContentOffset > scrollView.contentOffset.y) {
scrollDirection = ScrollDirectionDown;
} else if (self.lastContentOffset < scrollView.contentOffset.y) {
scrollDirection = ScrollDirectionUp;
}
self.lastContentOffset = scrollView.contentOffset.y;
CGRect frame = self.navigationController.navigationBar.frame;
CGFloat minimumFrameHeight = 30.0f;
CGFloat maximumFrameHeight = 44.0f;
CGFloat titleSize = [[self.navigationController.navigationBar.titleTextAttributes objectForKey:NSFontAttributeName] pointSize];
CGFloat minimumTitleHeight = 22.0f;
CGFloat maximumTitleHeight = 30.0f;
if (currentPosition …
Run Code Online (Sandbox Code Playgroud) 我看到我的应用程序中的所有ios动画都停止工作.它在iOS7中经常发生.
嘿家伙我有一个支持iOS 5,6和7的应用程序.我最近看到所有iOS动画都停止在iOS7的应用程序中工作?
UIView需要根据自定义控件的完成处理程序更改警告标签:
voucherInputView.completionHandler = {[weak self] (success: Bool) -> Void in
self?.proceedButton.enabled = success
self?.warningLabel.alpha = 1.0
if success
{
self?.warningLabel.text = "Code you entered is correct"
self?.warningLabel.backgroundColor = UIColor.greenColor()
}
else
{
self?.warningLabel.text = "Code you entered is incorrect"
self?.warningLabel.backgroundColor = UIColor.orangeColor()
}
UIView.animateWithDuration(NSTimeInterval(1.0), animations:{ ()-> Void in
self?.warningLabel.alpha = 1.0
})
Run Code Online (Sandbox Code Playgroud)
最终动画块在表单中显示错误.
Cannot invoke 'animateWithDuration' with an argument list of type '(NSTimeInterval), animations: ()-> Void)'
Run Code Online (Sandbox Code Playgroud)
如果我在完成闭包之外的某个地方调用它就可以了.
uianimation ×10
ios ×7
iphone ×4
objective-c ×3
uiview ×3
ios7 ×2
animation ×1
closures ×1
cocoa-touch ×1
ipad ×1
quartz-core ×1
swift ×1