UIView上的清除掩码(实际上是视频视图)

时间:2014-12-17 23:44:22

标签: ios objective-c cocoa-touch uiview core-animation

我使用OpenTok这是一个webRTC框架。我需要做的是拍摄显示的视频并将其裁剪成圆圈。问题是,由于这个视频化身视图将被放置在具有清晰背景的视图中,我不能仅使用如此S.O.中所示的掩模。问题:

Cut Out Shape with Animation

我还尝试在UIView类别中使用layer.radius

-(void)setRoundedViewToDiameter:(float)newSize;
{
    CGPoint saveCenter = self.center;
    CGRect newFrame = CGRectMake(self.frame.origin.x, self.frame.origin.y, newSize, newSize);
    self.frame = newFrame;
    self.layer.cornerRadius = newSize / 2.0;
    self.center = saveCenter;
}

然后像这样应用:

- (void) setUserVideoView:(UIView *)view {

    [view setRoundedViewToDiameter:[WSUserView dimForUserAvatar:_sizeIndex]];
    self.userVideo = view;
    [self.userVideo setRoundedViewToDiameter:[WSUserView dimForUserAvatar:_sizeIndex]];
    [self addSubview:self.userVideo];
    [self sendSubviewToBack:self.userVideo];

    [self layoutSubviews];

}

但它仍然是一个未切割的矩形。这是视频视图的一部分。我首先显示用户图像头像,但是当视频流连接时,我想用视频视图替换图像,但是作为一个圆圈。左图是我需要制作圆圈的流视图。

enter image description here

此外,这里是我试图裁剪的视频视图的检查员视图。如您所见,它是OTGLKVideoView类。

enter image description here

1 个答案:

答案 0 :(得分:0)

从我的评论中迁移:

您应该设置self.layer.masksToBounds = YES,因为这样可以确保图层的子图层也会被修剪角半径。我假设问题出现了,因为每当视频帧改变时更新的不断变化的子层因此忽略了角半径。

通过这个解决类似问题的答案可以找到更多细节:https://stackoverflow.com/a/11325605/556479