UIScrollView 内的 MPMoviePlayerController 缩放问题

Posted

技术标签:

【中文标题】UIScrollView 内的 MPMoviePlayerController 缩放问题【英文标题】:MPMoviePlayerController inside UIScrollView zooming problems 【发布时间】:2014-05-26 17:29:07 【问题描述】:

我正在尝试在 TwitchTV 应用中实现流式视频的缩放:

TwitchTV

应该是相当严格的。我有一个滚动视图,我向其中添加了内容视图,该视图用作所有需要缩放的子视图的容器。它适用于简单的 UIViews 或 UIImageViews:

- (void)viewDidLoad

    [super viewDidLoad];

    self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.jpg"]];
    [self.imageView setFrame:self.scrollView.bounds];

    self.contentView = [[UIView alloc] init];
    [self.contentView setFrame:self.scrollView.bounds];
    [self.contentView addSubview:self.imageView];    
    [self.scrollView addSubview:self.contentView];  

    self.scrollView.minimumZoomScale = 0.5;
    self.scrollView.maximumZoomScale = 1.0;
    self.scrollView.delegate = self;    
    self.scrollView.zoomScale = 1.0;     


- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView

    return self.contentView;

但是,如果我将 MPMoviePlayerController 的视图添加为 contentView 的子视图,它不会正确缩放。如果 scrollView 的 contentSize 等于其边界,则捏缩放不起作用,并且仅当我在 scrollView 滚动时捏住时才起作用。有什么问题?

这是我初始化 MPMoviePlayerController 的方式:

- (void)viewDidLoad

    [super viewDidLoad];
    // Initialize contentView

    [self setupMovie];
    [self.contentView addSubview:self.moviePlayerController.view];
    [self.scrollView addSubview:self.contentView];

    // Zoomscale stuff etc


- (void)setupMovie

    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:self.movieURL];

    if (player)
    
        self.moviePlayerController = player;        
        [player setContentURL:movieURL];
        [player setMovieSourceType:MPMovieSourceTypeStreaming];
        [player.view setFrame:self.contentView.bounds];        
        [player view].backgroundColor = [UIColor blackColor];
    

【问题讨论】:

【参考方案1】:

找到解决方案,如果有人感兴趣的话。

如果将 UIScrollView 的缩放行为添加为 scrollView'w 子视图,它看起来会与 MPMoviePlayerController 的视图的捏合手势识别器冲突。所以如果你不需要这个识别器,你可以删除它:

MPMoviePlayerController *player;

[[[player view] subviews] enumerateObjectsUsingBlock:^(id view, NSUInteger idx, BOOL *stop) 
        [[view gestureRecognizers] enumerateObjectsUsingBlock:^(id pinch, NSUInteger idx, BOOL *stop) 
            if([pinch isKindOfClass:[UIPinchGestureRecognizer class]]) 
                [view removeGestureRecognizer:pinch];
            
        ];
    ];

【讨论】:

以上是关于UIScrollView 内的 MPMoviePlayerController 缩放问题的主要内容,如果未能解决你的问题,请参考以下文章

限制 UIScrollView 内的 UILabel 的高度

UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

UIScrollview内的UIView内的UIButton,ARC问题

Swift - 通过点击 ScrollView 内的 ViewController 内的按钮来滚动 UIScrollView

UIScrollView 内的 CPTXYGraph

UIScrollView 内的 UIVIew 反弹回来