- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的其中一个 View 之上添加了一个 subview ,并使用 animateWithDuration 对其进行动画处理,使其从屏幕底部开始并在屏幕顶部结束。一切正常,除了在 animateWithDuration 完成后,顶部的 View 没有用户交互,下面的 View 仍然有用户交互。如果我删除 animateWithDuration,并且只是在其正常位置启动 subview ,用户交互也会按照我的预期进行,这就是为什么我认为 animateWithDuration 是问题所在。
这是我的代码:
UIViewController *viewController = [[CCouponDetailViewController alloc] init];
[[viewController view] setBounds:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height * -1), viewController.view.bounds.size.width, viewController.view.bounds.size.height)];
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
CGRect newFrame = viewController.view.frame;
newFrame.origin.x = 0;
newFrame.origin.y = ([UIScreen mainScreen].bounds.size.height * -1);
[UIView animateWithDuration:1.0
animations:^{
viewController.view.frame = newFrame;
}
completion:^(BOOL finished){
[viewController didMoveToParentViewController:self];
}
];
我的另一个问题(不是很重要,只是好奇)是在 newFrame 中,我将 y 设置为与我最初设置边界时相同的值,但它会移动。我原以为 newFrame 需要 y 值“0”,但是当我这样做时什么也没有发生。只是想知道为什么会这样。
最佳答案
我实际上会在这个问题上倒退......
“我的另一个问题(不是很重要,只是好奇)是,在 newFrame 中,我将 y 设置为与我最初设置边界时相同的值,但它会移动。我会期望 newFrame 要求 y 值为“0”,但当我这样做时什么也没有发生。只是想知道为什么会这样。”
这实际上是您需要回答的一个非常重要的问题,因为它与您的代码无法正常工作的原因有很大关系。您误解了一些非常重要的概念。
首先,UIView
的bounds
决定了它完全相对于自身的位置。 frame
确定 UIView
在其父 View 中的位置。在您的代码中,您最初设置的是 View 的 bounds
,而不是 frame
--
[[viewController view] setBounds:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height * -1), viewController.view.bounds.size.width, viewController.view.bounds.size.height)];
-- 所以您最初根本没有确定 View 在其父 View 中的位置,而只是与其自身有关。
本质上,您最终会得到一个带有 0x0 帧的 CCouponDetailViewController
View ,但是由于您没有指定您希望 UIView
剪辑其 subview , CCouponDetailViewController
View 的部分实际上并不在其 View 之上,而是可见并悬在 UIView
的边界之上。它们不可选的原因是因为它们实际上不在 UIView
中。
因此,要解决此问题,请设置 UIView
的初始 frame 而不是设置 bounds(我已将初始帧编辑为从屏幕底部开始,就像您正在尝试做的那样。顺便说一下,我不明白您正在尝试做的高度 x -1 事情...):
[[viewController view] setFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height, viewController.view.bounds.size.width, viewController.view.bounds.size.height)];
其次,您设置的新框架不正确。你不能这样设置 CGRect:
CGRect newFrame = viewController.view.frame;
newFrame.origin.x = 0;
newFrame.origin.y = ([UIScreen mainScreen].bounds.size.height * -1);
相反,使用 CGRectMake
设置它(而且,我再次编辑了 y 值,以便 View 像您尝试的那样最终位于屏幕顶部):
CGRect newFrame = CGRectMake(0, 0, viewController.view.frame.width, viewController.view.frame.height);
关于ios - AnimateWithDuration 在 UIView 上禁用 userInteraction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883243/
我正在使用这些(代码块 1 和 2)将带有动画的 UIScrollView 从开始移动到我的结束点(x:0 到 1000,在这个例子中) 代码块 1: UIScrollView.animateWith
-(void)fadeLabel{ UILabel *label = (UILabel *)[self.view viewWithTag:kLabelTag]; [UIView ani
我正在使用 animateWithDuration 让我的 UIVIew 之一无休止地旋转。现在,我需要获取 UIView 在特定时间旋转的当前值。我尝试使用以下功能: -(float)getCurr
我在 viewController 中有一个循环动画 - (void)moveAnimating { [UIView animateWithDuration:2.0f animations:^
出于某种原因,如果我只使用代码: [UIView animateWithDuration:.5 delay:0 options:UIViewAn
我正在学习 Swift,但在从不同函数移动 UIView 时遇到问题。如果我使用这个: View Controller : let boardView = BoardView() @IBAction
let downFrame = CGRect(x: 0, y: ScreenSize.height, width: ScreenSize.width, height: ScreenSize.heigh
我试图让“luke”跳过一个物体以确保游戏不会结束,他确实这样做了,但即使他避开了物体,游戏仍然会结束,就好像 luke 在游戏过程中没有离开他原来的位置一样动画。 我在 -(void)touches
我在 UIViewController 中使用此方法来显示一条消息三秒钟,然后淡出。 mainMessageLabel 是在接口(interface)文件中声明的 UILabel。 - (void)
我正在尝试对三个 UILabel(display1、display2、display3)进行交叉溶解,方法是使用 block 动画淡出、更改文本,然后一次淡入一个。我使用的代码是: [UIView a
今天 animateWithDuration 表现得很愚蠢,我不知道为什么。我检查了所有的东西,所有的括号,一切都很完美,但它总是呈现我没有指定为动画的代码行。 好的,这就是重点。我有一个 longP
我有一个没有自动布局的 ViewController,我正在尝试为一些按钮设置动画。我在 ViewDidAppear 中有一些 UIView animateWithDuration 代码,那里的一切都
我想在我的标签上先淡出然后淡入,我可以让两者分开工作但不能一起工作。 [UILabel animateWithDuration:1.0 animations:^{ _swixV
我正在尝试运行示例来测试此功能。我在 Storyboard中有一个标签和一个按钮,我在 View Controller 中引用了标签的底部约束。当我使用按钮时,我希望标签随动画一起移动,但它在没有动画
我有一个用 animateWithDuration 和 setAnimationRepeatCount() 动画的脉冲矩形。 我正在尝试在同步“点击”的动画 block 中添加声音效果。但音效只播放一
我在 switch 语句中有一段动画,该语句运行并执行预期的操作。在计时器内每二十秒成功调用一次动画。但是,动画不会在任何时候发生,而是在第一次发生。在我下面的代码中,您将看到我用来尝试突出显示问题的
我正在尝试将 JSSAlertView ( github.com/stakes/JSSAlertView ) 与 Swift 2.0 一起使用,但出现错误: Cannot invoke animate
我在我的 ScrollView 委托(delegate)方法 scrollViewDidEndDragging 中执行了一个简单的动画。 看起来像这样: - (void)scrollViewDidEn
我有一个 CollectionView,我想在用户选择的 CollectionViewCell 中创建一个动画。我选择使用 animateKeyframesWithDuration 是因为我想逐步创建
在执行 UIView.animateWithDuration 时,我想定义一条自定义曲线以方便使用,而不是默认曲线:.CurveEaseInOut、.CurveEaseIn、.CurveEaseOut
我是一名优秀的程序员,十分优秀!