没有正确地进行CG绘图

时间:2013-07-19 02:23:47

标签: ios objective-c core-graphics

刚开始使用Core Graphics,我可能不知道发生了什么。

在下面的代码中,我试图创建一个覆盖在 UINavigationController 顶部的小圆形半透明黑色方块,但到目前为止还没有出现......

UIView *notificationView = [[UIView alloc] initWithFrame:[[[self navigationController] view] frame]];

CGRect rect = CGRectMake(self.view.frame.size.width / 2 - 50, self.view.frame.size.height / 2, 100, 100);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
[[UIColor colorWithWhite:0 alpha:0.5] setFill];

UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:10];
[path fill];

[notificationView setNeedsDisplay];

[[[self navigationController] view] addSubview:notificationView];

1 个答案:

答案 0 :(得分:0)

选项1 (设计最友好的一个)

UIView并不是真正意义上的其他对象。对UIView进行子类化并让它在drawRect中进行自己的绘制更具有设计意义。这样,每次要使用通知视图时都不必粘贴太多代码。

选项2 (最简单的,可能最好的)

如果您只想要一个半透明的黑色圆角矩形(我假设是一个加载指示器),您可以通过创建所需大小的UIView并在视图中居中来更轻松地完成。将其背景颜色设置为半透明颜色[UIColor colorWithWhite:0.0 alpha:0.5]。最后,添加行

notificationView.layer.cornerRadius = 10.0;

您可能还需要在标头文件中添加#import <QuartzCore/QuartzCore.h>,因为这是CALayer技巧。

选项3 (环形交叉口)

如果您真的想按照自己的方式进行操作,请将notificationView更改为UIImageView,然后将视图框设置为黑色圆角矩形的大小。然后在填写路径后添加:

UIImage *indicatorImage = UIGraphicsGetImageFromCurrentImageContext();
notificationView.image = indicatorImage;

您不再需要致电setNeedsDisplay

希望其中一个听起来不错!