【问题标题】:Crop a part of viewcontroller裁剪视图控制器的一部分
【发布时间】:2015-07-29 14:46:29
【问题描述】:

我想将视图控制器的一部分裁剪成半圆形,以便通过裁剪部分可以看到它后面的视图控制器。有没有办法使用objective-c或任何已经可用的自定义控件来做到这一点。

  1. 一个有 10 个单元格的 TableviewContoller

  2. ImageWiderContoller 大图和其他控件

表格的第一个单元格应该有一个半圆形,通过它应该可以看到 ImageWiderContoller(位于 TableviewContoller 下方) 所以在 tableview 上向左滑动应该会显示 imageWiderController

【问题讨论】:

  • My Answer here 可能就是你要找的东西
  • 在前一个视图控制器下无法看到另一个视图控制器被推送或呈现的视图控制器。要检查,只需将显示的 viewController 的视图的背景设置为清除。
  • 这不是真的@ZeMoon,因为如果 ViewController 以模态方式呈现,您可以将 UIModalPresentationStyle 设置为 OverCurrentContext 并且之前的 viewController 视图可见
  • @Lefteris 哦,这是在 iOS 8 中引入的。很高兴听到这个消息!
  • 你可以使用容器视图控制器,而不是裁剪。

标签: ios cocoa-touch core-graphics viewcontroller


【解决方案1】:

我想到的唯一方法是自定义UIView,并将其设置为最顶部UIViewController 的默认视图。在 UIView's drawRect() 方法中,您可以绘制任何您想要的形状(包括透明的)。就像如果你想在你的控制器中间画一个透明的圆圈,你可以在你的 UIView 的drawRect() 中这样做:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    [[UIColor orangeColor] setFill]; //background Fill
    CGContextFillRect(context, self.bounds);

    [[UIColor clearColor] setFill]; //circle Fill.
    CGContextFillEllipseInRect(context, (CGRect){self.center.x - 25.0f, self.center.y - 25.0f, 50.0f, 50.0f});
}

在同一个 UIView 的 initWithFrame: 中添加这个:

[self setBackgroundColor:[UIColor clearColor]];

P.S:正如@Lefteris 所提到的,显然将您的UIViewControllerUIModalPresentationStyle 设置为OverCurrentContext,以便它出现在同一个控制器上。

注意:我所说的透明是指顶部控制器的区域,它根据您的需要显示下方控制器的内容。

【讨论】:

  • 感谢您的回答@Sabir Ali。我已经编辑了我的问题以解释我的真正需求
  • 您可以通过自定义 UITableViewCell 类并将此 drawRect: 函数放入其中来使用相同的 drawRec: 方法。然后,您可以将自定义的UITableViewCell 用于表格的第一个单元格,并将默认单元格用于其余单元格。考虑到您更新的问题,它应该可以正常工作。 (PS:如果我还是弄错了,请分享所需定制的模型,我很乐意提供帮助)
  • 与我实现的想法完全相同,但我正在寻找除此之外的其他东西。但我会放弃你的答案。
  • 感谢@Manoj,如果您的意思是您正在为相同的结果寻找不同的方法,我很想知道您的发现:)
  • 你确定@Sabir Ali,当我对我的任务有新想法时,我会更新一次。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多