3

我正在尝试从 viewController 顶部的底部为 UIWebView 设置动画,并且我正在使用砌体(https://github.com/Masonry/Masonry)。

我最初创建大小为 0 -(x、y、高度和宽度)的 webview,然后尝试对其进行动画处理,以便 webview 在视图控制器的“顶部”进行动画处理。显示了 web 视图,但它没有就地动画 - 它只是立即出现。有经验的人可以指导我正确的方向吗?

这是我的按钮动作

-(void)didPressBtn{
    self.infoView = [UIWebView new];
    self.infoView.scalesPageToFit = YES;
    self.infoView.backgroundColor = [UIColor whiteColor];
    self.infoView.delegate = self;
    [self.scrollView addSubview:self.infoView];
    [self.infoView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(@(0));
    }];


    [self.scrollView layoutIfNeeded];
    //FIXME: Hmmm it doesn't really animate!?
    [UIView animateWithDuration:1 animations:^{
        [self.scrollView setContentOffset:CGPointMake(0, 0)];
        [self.infoView makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(self.scrollView);
        }];

        [self.scrollView layoutIfNeeded];

    } completion:^(BOOL finished) {
                [self.infoView loadRequest:[[NSURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:NSLocalizedString(@"INFORMATION_URL", )] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:15]];
    }];
}

我的 viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.scrollView = [UIScrollView new];
    self.scrollView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.scrollView];
    [self.scrollView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
    }];

    UIView *contentView = [UIView new];
    [self.scrollView addSubview:contentView];

    [contentView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.scrollView);
        make.width.equalTo(self.scrollView);
    }];

//Then adding buttons and such...
}
4

1 回答 1

17

关于 的快速观察didPressButton。您正在使用mas_makeConstraints将边缘设置为等于,@0然后立即mas_makeConstraints再次使用它们来更改它们以填充滚动视图。这在第一组之上添加了矛盾的约束。

相反,您可以使用mas_remakeConstraints来替换该视图上的现有约束。

至于动画,我使用的模式是首先更新约束(不在动画块内),然后为布局设置动画:

[UIView animateWithDuration:1
        animations:^{
            [theParentView layoutIfNeeded];
        }];

另请参阅如何为约束更改设置动画?

于 2015-01-22T03:42:50.530 回答