picture我正在使用ionic / cordova地图插件处理地图应用程序,我想更改标记,以便我在ios平台中更改插件。我在标记图标中传递自定义属性并绘制一个矩形以在标记上显示标题。 从本地加载图像时从setIcon方法调用circularScaleAndCropImage方法。
我收到此上下文错误,我不知道如何解决此问题。
[HttpPost("{userid?}")]
public IActionResult GetData(string userid)
{
if (!string.IsNullOrEmpty(userid))
{
return View(new ViewModel(userid));
}
return StatusCode(401);
}
看到图片,请建议我解决问题
答案 0 :(得分:0)
我认为主要问题在于,您想要异步下载图像。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:iconPath];
[self downloadImageWithURL:url completionBlock:^(BOOL succeeded, UIImage *image) {
...
});
方法很好,基本问题是:返回的图像不应在主线程中处理,而处理功能确实需要在主线程中执行。
这也是为什么以后在代码块中你想要在主线程中执行更改的原因:
dispatch_async(dispatch_get_main_queue(), ^{
marker.icon = image;
...
});
所以你需要做的是:在主线程中执行图像处理 - 在你的情况下,你甚至可以为此采取以下调度程序:
所以代替:
if([iconType isEqualToString:ImageMarkerString ]){
NSLog(@"ICON Marker Type Condition True 3");
CGRect newRect = CGRectMake(0, 0, width, height);
image = [self circularScaleAndCropImage:image frame:newRect color:borderColor label : markerLabel heading :markerHeading];
}
dispatch_async(dispatch_get_main_queue(), ^{
marker.icon = image;
...
});
将处理移动到主线程中,最终看起来像:
dispatch_async(dispatch_get_main_queue(), ^{
if([iconType isEqualToString:ImageMarkerString ]){
NSLog(@"ICON Marker Type Condition True 3");
CGRect newRect = CGRectMake(0, 0, width, height);
image = [self circularScaleAndCropImage:image frame:newRect color:borderColor label : markerLabel heading :markerHeading];
}
marker.icon = image;
...
});
有关如何使用调度程序的其他信息,请访问: https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html
以下是有关上下文的一些笔记,其中应执行操作: https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html