gpt4 book ai didi

ios - 是否可以在 block 中绘制 CGContext ?

转载 作者:行者123 更新时间:2023-12-01 20:10:04 24 4
gpt4 key购买 nike

在 IOS 上,我有一个 NSArray 存储 blocks在 UIView 上绘制一些东西,例如:

^(CGContextRef ctx) {
// drawing rectangle
CGRect rect = CGRectMake(0, 0, 300, 300);
CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
CGContextFillRect(ctx, rect);
CGContextStrokeRect(ctx, rect);
};

数组中会存储几个 block ,我希望这些 block 在 drawRect 时依次执行。被调用,这是我的 drawRect
- (void)drawRect:(CGRect)rect {
// execute blocks
for(NSDictionary * task in drawTaskQueue)
{
DrawTaskBlock block = [task objectForKey:@"block"];
block(args, UIGraphicsGetCurrentContext());
}
}

但是当我运行代码时,我确信这些 block 被执行而没有任何错误,但什么也没有出现。我错过了什么吗?

最佳答案

您的代码的问题是您传递的 block 需要一个类型为 CGContextRef 的参数。 , 而调用代码传递两个参数 - argsUIGraphicsGetCurrentContext() .

由于 Objective-C 不检查强制转换,因此您的 block 最终会以错误的图形上下文运行,从而导致未定义的行为。

要解决此问题,您需要确保 block 的“签名”与您将其转换为的 block 类型的签名匹配,即 DrawTaskBlock .签名必须包含正确类型的 args参数,即使您的任何 block 都没有使用它。

关于ios - 是否可以在 block 中绘制 CGContext ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899360/

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