子视图(MPMoviePlayerController)不使用容器视图设置动画

时间:2012-09-19 16:16:39

标签: objective-c ios uiview mpmovieplayercontroller

我正在向容器视图中添加MPMoviePlayerController,如下所示:

self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:self.videoURL];
. . .
self.moviePlayer.view.frame = self.frame;
[self addSubview:self.moviePlayer.view];

self是容器视图。当视图控制器创建容器视图时,它将在屏幕外实例化。因此容器视图位于视图中,MPMoviePlayerController位于容器视图中。

当我在屏幕上为容器视图设置动画时,它可以正常工作。其他视图会滑落,此视图会滑入。但是,MPMoviePlayerController会将其框架放在屏幕外。因此MPMoviePlayerController的容器视图在屏幕上移动,但它不随容器视图移动。这是不允许的,还是我错过了什么?动画容器视图的代码如下:

[UIView animateWithDuration:ANIMATION_LENGTH animations:^() {
    for(int i = beginTag; i < beginTag + [self subviews].count; i++) {
        UIView *viewPointer = [self viewWithTag:i];
        CGRect viewFrame = viewPointer.frame;
        viewFrame.origin.x -= SCREEN_WIDTH_VC;
        viewPointer.frame = viewFrame;
    }
} completion:^(BOOL finished) {
    [self.vidLoad playVideo];
}];

这将处理屏幕上屏幕上的元素动画,然后将屏幕外元素带到屏幕上。我很高兴听到所有的建议!

1 个答案:

答案 0 :(得分:0)

解决了 - 这是我自己愚蠢的结果。视图层次结构确实有效,但是当我将self.frame分配给moviePlayer.view.frame时,它采用了容器视图的绝对坐标,而不是相对坐标。

一个愚蠢的错误。基本上,我只需要写

self.moviePlayer.view.frame = CGRectMake(0, 0, SCREEN_WIDTH_VC, SCREEN_HEIGHT_VC);

这会将它放在容器视图的顶部,因为这些坐标是相对于容器视图而不是屏幕(我只是把自己搞糊涂了)。

相关问题