UIView + animateWithDuration:没有正确地为最近分配的视图设置动画

时间:2014-03-26 15:56:01

标签: ios animation uiview

我正在尝试使用特定框架分配webview,然后为其y位置和高度设置动画。当我这样做时,webview立即捕捉到它的“最终”位置,而不是动画y,但它是动画高度。

另外,为了没有混淆,我使用UIView + Positioning(https://github.com/freak4pc/UIView-Positioning)来设置我的x,y,高度和宽度,而不是摆弄CGRects:)

这是动画的截屏,问题是在y = 260 / height = 0px时立即创建webview,它应该从y = 340 / height = 0px开始并转换到y = 260和高度= maxHeight。 y = 340px是顶部和底部分割的位置,也是webview上“关闭”动画所关注的位置。

代码

    for (PageViewController * page in pages) {
        [page preFullscreen];
    }
    [UIView animateWithDuration:0.5f animations: ^() {
        for (PageViewController * page in pages) {
            [page fullScreen];
        }
    }];

...

- (void)preFullscreen {
    _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 340.0f, 320.0f, 0.0f)];
    _webView.delegate = self;
    _webView.scrollView.bounces = NO;
    _webView.scrollView.scrollEnabled = NO;
    _webView.scalesPageToFit = YES;
    _webView.backgroundColor = [UIColor whiteColor];
    [_scrollView addSubview:_webView];
    [_webView loadHTMLString:[entry storyHTML] baseURL:nil];
}

- (void)fullScreen {
    _darkOverlayview.alpha = 0.0f;
    _webView.y=260.0f;
    _webView.height = [[UIScreen mainScreen] bounds].size.height - 260.0f;
    _scrollView.delegate = hsVC;
    _textareaView.hidden = YES;
    _frontImage.height = 260.0f;
    self.view.height = [[UIScreen mainScreen] bounds].size.height;
    _scrollView.height = [[UIScreen mainScreen] bounds].size.height;
}

1 个答案:

答案 0 :(得分:2)

我认为问题恰恰在于您正在使用UIView+Positioning个添加内容?在内部,它最终在动画块内多次设置帧,因此开始位置丢失。使用常规setFrame:在动画块中的每个视图中设置整个帧一次。

至于动画UIWebView,我还建议在preFullscreen中将其设置为全高(以便它位于屏幕下边缘下方),并且只为{{1}设置动画效果坐标。根据我的经验,在动画期间调整webview的大小可能会有问题,因为Web内容也会调整大小。