gpt4 book ai didi

ios - CGPattern 绘制不是从所需的点开始

转载 作者:行者123 更新时间:2023-11-29 12:44:54 30 4
gpt4 key购买 nike

我有一个简单的代码在 UIView 上绘制大小为 PSIZE = 50 的方形图案。当我从零(0,0)点开始绘制时,一切都很好。当我将上下文转换为另一个点而不是 PSIZE 的倍数时,该模式仍然有效但不是从所需的点开始。下图是我转换到点 (75, 75) 和原点时的结果。任何人都可以帮助我找到在任何点开始绘制的方法,并且完全是细胞图案的原始点。

#define PSIZE 50
void backgroundLinePattern (void *info, CGContextRef context)
{
UIColor * lineColor = [UIColor yellowColor];

CGContextSetStrokeColorWithColor(context, lineColor.CGColor);

CGContextMoveToPoint(context, 0, 0);
CGContextSetLineWidth(context, PSIZE * 0.1);
CGContextAddLineToPoint(context, 0, PSIZE);
CGContextAddLineToPoint(context, PSIZE, PSIZE);
CGContextAddLineToPoint(context, PSIZE, 0);
CGContextAddLineToPoint(context, 0, 0);
//CGContextAddLineToPoint(context, PSIZE, PSIZE);
CGContextStrokePath(context);
}

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}

-(void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context{
//CGContextScaleCTM(context, 10, 10);
CGContextSaveGState(context);
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetFillColorSpace(context, patternSpace);
CGColorSpaceRelease(patternSpace);
//CGContextTranslateCTM(context, 75, 75); //TRANSLATE LINE
//CGAffineTransform t = CGAffineTransformMakeScale(50, 50);
CGRect r = CGRectMake(-0, -0, PSIZE, PSIZE);
const CGPatternCallbacks callbacks = { 0, &backgroundLinePattern,NULL };
CGPatternRef pattern = CGPatternCreate(NULL,
r,
CGAffineTransformIdentity,
PSIZE,
PSIZE,
kCGPatternTilingConstantSpacing,
true,
&callbacks);
CGFloat alpha = 1.0;
CGContextSetFillPattern(context, pattern, &alpha);
CGPatternRelease(pattern);

CGRect rect = CGRectMake(0, 0, 400, 400);
CGContextFillRect(context,rect);

CGContextRestoreGState(context);
}

enter link description here

enter link description here

最佳答案

图案在整个图形上下文中重复。您的绘图只是图案那个区域的一个窗口。因此,如果您移动绘图并希望图案相对于移动绘图在同一位置开始,则必须单独移动图案的起点。研究 CGContextSetPatternPhase() 以了解如何执行此操作。

关于ios - CGPattern 绘制不是从所需的点开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889981/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com