【问题标题】:Clear Mask on UIView (actually a video view)UIView 上的 Clear Mask(实际上是视频视图)
【发布时间】:2015-02-16 16:02:06
【问题描述】:

我正在使用 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];

}

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

另外,这是我尝试裁剪的视频视图的检查器视图。如您所见,这是一个OTGLKVideoView 类。

【问题讨论】:

  • 您应该设置self.layer.masksToBounds = YES,因为这样可以确保图层的子图层也被圆角半径剪切。我假设问题的出现是因为不断变化的子层在视频帧发生变化时更新,从而忽略了角半径。更多详情:stackoverflow.com/a/11325605/556479
  • 您可能还需要确保使用 clipsToBounds。
  • @max_ 我们赢了!
  • @Ramsel 我很高兴它成功了!

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


【解决方案1】:

从我的评论迁移:

您应该设置self.layer.masksToBounds = YES,因为这样可以确保图层的子图层也被圆角半径裁剪。我假设问题的出现是因为不断变化的子层在视频帧发生变化时更新,从而忽略了角半径。

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

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    相关资源
    最近更新 更多