【发布时间】:2015-02-16 16:02:06
【问题描述】:
我正在使用 OpenTok,它是一个 webRTC 框架。我需要做的是获取显示的视频视图并将其裁剪为一个圆圈。问题是,由于此视频头像视图将放置在具有清晰背景的视图中,因此我不能只使用此 S.O. 中所示的蒙版。问题:
我也尝试在 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