标签: drawrect

在drawRect中使用iOS反转掩码

使用下面的代码,我成功地屏蔽了我绘图的一部分,但它与我想要屏蔽的相反.这掩盖了绘图的内部,我想掩盖外部.有一种简单的方法来反转这个面具吗?

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)

core-graphics masking uiview drawrect ios

24
推荐指数
5
解决办法
1万
查看次数

CGContextSaveGState与UIGraphicsPushContext

有两种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.

问题:这些方法有什么区别?哪一个更好用?是否有一些证明一种方法比其他方法更好的例子,反之亦然?

objective-c cgcontext drawrect ios

24
推荐指数
1
解决办法
6453
查看次数

如何在目标c中以编程方式调用drawRect

如何在目标c中以编程方式调用drawRect?

我想在我的UItabbarcontroller中调用一个视图的drawrect方法.我怎么能这样做?提前致谢..

编辑

当目前看不到视图时我必须打电话.这将是我第一次打电话给那个观点

iphone objective-c drawrect

22
推荐指数
1
解决办法
2万
查看次数

在不使用UILabel的情况下,在drawRect:方法中为NSString文本添加投影

我想为使用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绘图的新手).

建议?

nsstring uiview drawrect dropshadow ios

22
推荐指数
1
解决办法
1万
查看次数

从drawRect中抽取UIView的边界

我的问题与此问题非常相似当clipToBounds = NO没有得到明确的答案时,没有绘制外界.

基本上我有一个UIView,我想从它的中心画一条线到屏幕的边缘.计算这些点的位置很容易,使用[self convertPoint:(CGPoint){0,0} fromView:[self superview]];(找到关于我视图的超视图的原点.但是当我从我的视图的drawRect中绘制一条线时:它会被剪切到我的视图边界.

有没有办法在我的观点范围外画画?我试过更改clipsToBounds属性,但它似乎没有任何效果.

我不能从superview中绘制我的线条,因为我需要使用多个视图来执行此操作,有些将在其他视图之前...从superview的drawRect中找出图层看起来是个坏主意.

同样地,我认为我不能只调整我的视图范围以包含整个屏幕,因为我的视图需要动态调整大小...边界必须是巨大的(> 20,000点平方)才能工作.

iphone core-graphics objective-c drawrect

20
推荐指数
1
解决办法
8983
查看次数

iPhone SDK:如何在方向更改后触发UIView子类上的drawRect?

我正在继承UIView并覆盖drawRect方法.我注意到只在视图首次加载时才调用视图的drawrect.之后再也不会再打电话了.如何确保在方向更改后调用它?我已经尝试在旋转之前和之后调用setNeedsDisplay,但是没有这样做.

iphone uiview drawrect

19
推荐指数
2
解决办法
9322
查看次数

drawrect Vs layoutsubviews - NSView - Cocoa touch

我找不到一个体面的答案来解释我这两个功能之间的区别.每个人什么时候被召唤,一个人与另一个人有什么不同?

例如,我不能只是将我的视图布局在drawrect中吗?

谢谢

iphone cocoa-touch nsview drawrect

18
推荐指数
1
解决办法
6311
查看次数

CALayer renderInContext:绘图的位置

我有一个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属性.

core-animation calayer cgcontext drawrect

16
推荐指数
1
解决办法
4735
查看次数

填充后无法描边路径

下面的代码很好地创建了一个由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)

core-graphics drawrect ios

16
推荐指数
2
解决办法
5160
查看次数

如何绘制矩形?

我想在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)

iphone objective-c drawrect

15
推荐指数
2
解决办法
3万
查看次数