使用下面的代码,我成功地屏蔽了我绘图的一部分,但它与我想要屏蔽的相反.这掩盖了绘图的内部,我想掩盖外部.有一种简单的方法来反转这个面具吗?
myPath下面是一个UIBezierPath.
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef maskPath = CGPathCreateMutable();
CGPathAddPath(maskPath, nil, myPath.CGPath);
[maskLayer setPath:maskPath];
CGPathRelease(maskPath);
self.layer.mask = maskLayer;
Run Code Online (Sandbox Code Playgroud) 有两种drawRect方法:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
// do drawing here
CGContextRestoreGState(context);
}
Run Code Online (Sandbox Code Playgroud)
和
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
// do drawing here
UIGraphicsPopContext();
}
Run Code Online (Sandbox Code Playgroud)
UIGraphicsPushContext/UIGraphicsPopContext来自UIKit, 而CGContextSaveGState/CGContextRestoreGState来自CoreGraphics.
问题:这些方法有什么区别?哪一个更好用?是否有一些证明一种方法比其他方法更好的例子,反之亦然?
如何在目标c中以编程方式调用drawRect?
我想在我的UItabbarcontroller中调用一个视图的drawrect方法.我怎么能这样做?提前致谢..
编辑
当目前看不到视图时我必须打电话.这将是我第一次打电话给那个观点
我想为使用iOS提供的NSString (UIStringDrawing)类别方法绘制的文本添加阴影:
- (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width
withFont:(UIFont *)font minFontSize:(CGFloat)minFontSize
actualFontSize:(CGFloat *)actualFontSize
lineBreakMode:(UILineBreakMode)lineBreakMode
baselineAdjustment:(UIBaselineAdjustment)baselineAdjustment;
Run Code Online (Sandbox Code Playgroud)
显然,没有投影选项.
是的,可以在这里使用UILabel并获得设置的阴影属性,但这不会像性能一样,因为任何UIView子类(例如UILabel)都会包装CALayer对象并且会更重(性能明智).
这是上下文:
我正在为UITableViewCell子类做自定义绘图,drawRect:在表格单元视图上实现,而不是从合成的UIView子类的Nib文件创建表格单元格.
合成一堆UIView子类会破坏尝试保持这种精简并在表视图滚动性能中保持在每秒50-60帧内的目的.
我尝试过轻微的偏移两次绘制字符串.一旦我调整了我要去的单元格的背景颜色上的投影颜色,这可能会变得可以接受,但它似乎相当笨拙.当然没有像UILabel那样的阴影模糊属性.
我搜索了解决方案,他们或者推荐UILabel使用(我上面已经解雇了,因为我有十几个不同的文本元素被合成到表格单元格视图)或者CGContextSetShadow().后者似乎总是在矩形形状的上下文中提出,并且不一定用于将阴影附加到直接使用上述NSString drawAtPoint...方法绘制的文本的路径.(我确实尝试过,但它似乎没有用(即没有改变);我是Core Graphics绘图的新手).
建议?
我的问题与此问题非常相似当clipToBounds = NO没有得到明确的答案时,没有绘制外界.
基本上我有一个UIView,我想从它的中心画一条线到屏幕的边缘.计算这些点的位置很容易,使用[self convertPoint:(CGPoint){0,0} fromView:[self superview]];(找到关于我视图的超视图的原点.但是当我从我的视图的drawRect中绘制一条线时:它会被剪切到我的视图边界.
有没有办法在我的观点范围外画画?我试过更改clipsToBounds属性,但它似乎没有任何效果.
我不能从superview中绘制我的线条,因为我需要使用多个视图来执行此操作,有些将在其他视图之前...从superview的drawRect中找出图层看起来是个坏主意.
同样地,我认为我不能只调整我的视图范围以包含整个屏幕,因为我的视图需要动态调整大小...边界必须是巨大的(> 20,000点平方)才能工作.
我正在继承UIView并覆盖drawRect方法.我注意到只在视图首次加载时才调用视图的drawrect.之后再也不会再打电话了.如何确保在方向更改后调用它?我已经尝试在旋转之前和之后调用setNeedsDisplay,但是没有这样做.
我找不到一个体面的答案来解释我这两个功能之间的区别.每个人什么时候被召唤,一个人与另一个人有什么不同?
例如,我不能只是将我的视图布局在drawrect中吗?
谢谢
我有一个UIView自定义形状绘制drawRect:.该frame属性设置为:
{5.f, 6.f, 50.f, 50.f}
Run Code Online (Sandbox Code Playgroud)
现在,我在图像上下文中渲染视图,但忽略了它的框架属性UIView,并始终UIView在左上角绘制.
[_shapeView.layer renderInContext:UIGraphicsGetCurrentContext()];
Run Code Online (Sandbox Code Playgroud)
我试图改变frame的CALayer,但什么都没有改变.修改bounds财产使事情变得更糟.我发现有用的唯一工作是:
CGRect frame = _shapeView.frame;
CGContextTranslateCTM(context, frame.origin.x, frame.origin.y);
[_shapeView.layer renderInContext:context];
Run Code Online (Sandbox Code Playgroud)
但是,当我处理许多形状时,这是不切实际的,我想只使用frame属性.
下面的代码很好地创建了一个由CGRect(rectRect)定义的圆角矩形.
它很好,但我没有中风.任何想法为什么我看不到中风?
-(void)drawRect:(CGRect)rect {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(ctx, 0, 0, 0, 0.4);
CGContextSetRGBStrokeColor(ctx, 1, 1, 1, 1);
CGContextSetLineWidth(ctx, 4.0);
float fw, fh;
rect = rectRect;
float ovalWidth = 12;
float ovalHeight = 12;
if (ovalWidth == 0 || ovalHeight == 0) {
CGContextAddRect(ctx, rect);
return;
}
CGContextTranslateCTM (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect));
CGContextScaleCTM (ctx, ovalWidth, ovalHeight);
fw = CGRectGetWidth (rect) / ovalWidth;
fh = CGRectGetHeight (rect) / ovalHeight;
CGContextMoveToPoint(ctx, fw, fh/2);
CGContextAddArcToPoint(ctx, fw, fh, fw/2, fh, 1);
CGContextAddArcToPoint(ctx, 0, fh, 0, …Run Code Online (Sandbox Code Playgroud) 我想在viewContoller的视图中绘制填充矩形.我在viewDidLoad中写了下面的代码.但没有变化.怎么了?
CGRect rectangle = CGRectMake(0, 100, 320, 100);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextFillRect(context, rectangle);
Run Code Online (Sandbox Code Playgroud) drawrect ×10
iphone ×5
ios ×4
objective-c ×4
uiview ×3
cgcontext ×2
calayer ×1
cocoa-touch ×1
dropshadow ×1
masking ×1
nsstring ×1
nsview ×1