gpt4 book ai didi

ios - 定时器上的 Objective C 加载图标

转载 作者:行者123 更新时间:2023-11-29 01:21:52 26 4
gpt4 key购买 nike

我已经为我的应用程序创建了一个加载图标。当应用程序加载 map 并放置标记时,我在屏幕上旋转显示一个加载图标。使用我当前的代码,加载图标会显示,但只有当标记全部放置在 map 上并且所有内容都完成加载时才会旋转。我已经尝试了一切,有人可以帮忙吗?

我将在下面附上代码,我知道这不是最好的方法,我计划在我发现我做错了什么让它在加载 map 时旋转时整理它。

谢谢。

- (void)viewDidLoad
{
[super viewDidLoad];
loading=@"0";

rotateTimer = [NSTimer scheduledTimerWithTimeInterval:0.3
target:self
selector:@selector(rotateMove)
userInfo:nil
repeats:YES];
}

-(void)rotateMove
{
if([loading isEqual:@"1"])
{
[rotateTimer invalidate];
rotateTimer = nil;
}
if([loading isEqual:@"0"])
{
NSLog(@"move");
[UIView animateWithDuration:1.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
[self.rotate setTransform:CGAffineTransformRotate(self.rotate.transform, M_PI_2)];
} completion:^(BOOL finished){
if (finished) {
}
}];
}
}

已编辑:在下面添加了 map 代码

-(void)mapload
{

[self.mapView clear];


NSString *lat = [[NSString alloc] initWithFormat:@"%g", latitude];
NSString *lng = [[NSString alloc] initWithFormat:@"%g", longitude];
NSURL *blogURL =
NSLog(@"URL = %@", blogURL);
NSData *jsonData = [NSData dataWithContentsOfURL:blogURL];
if(jsonData == nil)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection Error" message:@"Please check your internet connection and try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
return;
}
else{



NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSArray *test = [dataDictionary objectForKey:@"test"];

self.bottombutton.hidden=FALSE;
self.time.hidden=FALSE;
self.mins.hidden=FALSE;
self.rotate.hidden=TRUE;
int tes = [[test[0] valueForKey:@"time"] intValue];


}

for (int i = 0; i < [test count]; i++) {
for(NSDictionary *coordinates in test){

double la=[coordinates[@"lat"] doubleValue];
double lo=[coordinates[@"long"] doubleValue];

CLLocation * loca=[[CLLocation alloc]initWithLatitude:la longitude:lo];
CLLocationCoordinate2D coordi=loca.coordinate;

GMSMarker *marker= [[GMSMarker alloc] init];
marker=[GMSMarker markerWithPosition:coordi];
marker.snippet = coordinates[@"name"];
marker.map = self.mapView;
marker.appearAnimation = kGMSMarkerAnimationPop;

UIImage * image = [UIImage imageNamed:@"mapiconlarge"];
CGSize sacleSize = CGSizeMake(45, 45);
UIGraphicsBeginImageContextWithOptions(sacleSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, sacleSize.width, sacleSize.height)];
UIImage * resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSLog(@"markeradded");
marker.icon = resizedImage;
NSLog(loading);


}
}


}



}

最佳答案

我们需要梳理应该在后台完成的代码部分(至少是网络请求)以及必须在主代码上完成的代码(任何更改 UI 的内容)。 ..

// here, everything you do to prepare for the network request

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// make the network request
NSData *jsonData = [NSData dataWithContentsOfURL:blogURL];
dispatch_async(dispatch_get_main_queue(), ^{
// here everything you do after with the json data result
});
});

因此,您不必对语法感到疯狂,构建两个方法,第一个方法生成 blogURL 以供网络请求使用,第二个方法获取 NSData 结果并执行其他所有操作。这样,内部调度中就只嵌套了一个单行方法调用。

关于ios - 定时器上的 Objective C 加载图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34503070/

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