我正在开发一个具有圆形视图的项目。
到目前为止,我已经在SOflow上尝试了一些解决方案:
backgroundColor
设置为[UIColor clearColor]
并在drawRect
中手动绘制圆圈。在每种情况下,当视图翻转到新视图时,它是屏幕的矩形部分,而不仅仅是圆圈。我希望翻转成为圆圈,但我不确定下一步该去哪里。
这是我用来翻转视图的方法:
-(void)changeSpotToView:(SpotView *)toView {
[UIView transitionFromView:self.activeView
toView:toView
duration:1.0
options:UIViewAnimationOptionTransitionFlipFromTop
completion:^(BOOL finished) {
self.activeView = toView;
}];
}
SpotView
所在的容器也是SpotView
,所以它也应该只是一个圆圈。
任何指导都将不胜感激!
答案 0 :(得分:3)
问题是transitionFromView:toView:…
设置了fromView
的超级视图的动画。
我重现了这个问题:
我只需将fromView
和toView
嵌入到具有清晰背景的容器视图中,就可以在我的测试用例中修复它。这是我的工作版本:
我的笔尖看起来像这样:
我启用了矩形界面(编辑器> Canvas>显示边界矩形),因此您可以看到容器视图的轮廓,它比其子视图大。
我有一个红色视图和一个蓝色视图作为容器视图的子视图。蓝色视图位于红色视图后面,具有相同的框架。我在代码中对它们应用了圆形掩码。
这是我的代码:
- (void)viewDidLoad {
[super viewDidLoad];
self.blueView.hidden = YES;
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self addCircleMaskToView:self.blueView];
[self addCircleMaskToView:self.redView];
}
- (void)addCircleMaskToView:(UIView *)view {
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = view.bounds;
maskLayer.path = [UIBezierPath bezierPathWithOvalInRect:view.bounds].CGPath;
maskLayer.fillColor = [UIColor whiteColor].CGColor;
view.layer.mask = maskLayer;
}
- (IBAction)buttonWasTapped:(id)sender {
[UIView transitionFromView:self.redView toView:self.blueView
duration:1.0 options:UIViewAnimationOptionTransitionFlipFromTop
| UIViewAnimationOptionShowHideTransitionViews
completion:nil];
}