MrWooJ

drawing UI methods on the background thread

... ... @@ -181,8 +181,8 @@
- (void)setChartData:(NSArray *)data
{
if (data != _chartData) {
CGFloat yFinilizeValue , xFinilizeValue;
CGFloat yValue , xValue;
__block CGFloat yFinilizeValue , xFinilizeValue;
__block CGFloat yValue , xValue;
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
pathAnimation.duration = _duration;
pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
... ... @@ -191,6 +191,10 @@
pathAnimation.fillMode = kCAFillModeForwards;
self.layer.opacity = 1;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSThread sleepForTimeInterval:1];
// update UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
for (PNScatterChartData *chartData in data) {
for (NSUInteger i = 0; i < chartData.itemCount; i++) {
yValue = chartData.getData(i).y;
... ... @@ -207,6 +211,8 @@
[self.pathLayer addAnimation:pathAnimation forKey:@"fade"];
}
}
});
});
}
}
... ... @@ -313,11 +319,17 @@
}
- (void) drawLineFromPoint : (CGPoint) startPoint ToPoint : (CGPoint) endPoint WithLineWith : (CGFloat) lineWidth AndWithColor : (UIColor*) color{
// call the same method on a background thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSThread sleepForTimeInterval:2];
// calculating start and end point
CGFloat startX = [self mappingIsForAxisX:true WithValue:startPoint.x];
CGFloat startY = [self mappingIsForAxisX:false WithValue:startPoint.y];
CGFloat endX = [self mappingIsForAxisX:true WithValue:endPoint.x];
CGFloat endY = [self mappingIsForAxisX:false WithValue:endPoint.y];
__block CGFloat startX = [self mappingIsForAxisX:true WithValue:startPoint.x];
__block CGFloat startY = [self mappingIsForAxisX:false WithValue:startPoint.y];
__block CGFloat endX = [self mappingIsForAxisX:true WithValue:endPoint.x];
__block CGFloat endY = [self mappingIsForAxisX:false WithValue:endPoint.y];
// update UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
// drawing path between two points
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(startX, startY)];
... ... @@ -334,6 +346,8 @@
animateStrokeEnd.toValue = [NSNumber numberWithFloat:1.0f];
[shapeLayer addAnimation:animateStrokeEnd forKey:nil];
[self.layer addSublayer:shapeLayer];
});
});
}
@end
... ...