翻转圆形UIView

时间:2012-11-20 06:49:02

标签: ios uikit

我正在开发一个具有圆形视图的项目。

到目前为止,我已经在SOflow上尝试了一些解决方案:

  • 只需对视图层的角进行舍入。
  • 创建自定义CircleView,将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,所以它也应该只是一个圆圈。

任何指导都将不胜感激!

1 个答案:

答案 0 :(得分:3)

问题是transitionFromView:toView:…设置了fromView的超级视图的动画。

我重现了这个问题:

enter image description here

我只需将fromViewtoView嵌入到具有清晰背景的容器视图中,就可以在我的测试用例中修复它。这是我的工作版本:

working flip

我的笔尖看起来像这样:

nib

我启用了矩形界面(编辑器> 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];
}