kamaelia платформа Python для того, чтобы создать приложения с большим количеством коммуникационных процессов.
Kamaelia - Параллелизм сделал полезным, забавным
В Kamaelia Вы системы сборки от [1 110] простые компоненты, которые говорят друг с другом . Эта разработка скоростей, в широком масштабе помогает обслуживанию и также означает Вас сборка естественно параллельное программное обеспечение . Это предназначается, чтобы быть доступным [1 112] любой разработчик, включая новичков. Это также делает его забавой:)
, Какой системы? Сетевые серверы, клиенты, настольные приложения, pygame базирующиеся игры, транскодируют системы и конвейеры, системы цифрового телевидения, спам eradicators, обучающие инструменты и изрядное количество больше:)
См. также Вопрос Многоядерный и Параллелизм - Языки, Библиотеки и Методы Разработки
Если вы фактически изменяете только небольшую часть содержимого UIView каждый раз, когда рисуете (а остальное содержимое обычно остается неизменным), вы можете использовать это. Вместо того, чтобы перерисовывать все содержимое UIView каждый раз, вы можете пометить только те области представления, которые необходимо перерисовать, используя - [UIView setNeedsDisplayInRect:]
вместо - [UIView setNeedsDisplay]
.
Сколько эллипсов вы собираетесь нарисовать? В общем, Core Graphics должна уметь быстро рисовать много эллипсов.
Однако вы можете кэшировать свои старые рисунки в изображение (однако я не знаю, более производительно ли это решение):
UIGraphicsBeginImageContext(self.frame.size);
CGContextRef ctx = UIGraphicsGetCurrentContext(); // ctx is now the image's context
[cachedImage drawAtPoint:CGPointZero];
// only plot new ellipses here...
[cachedImage release];
cachedImage = [UIGraphicsGetImageFromCurrentImageContext() retain];
UIGraphicsEndImageContext();
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, self.bounds, maskRef); //draw the mask
CGContextClipToMask(context, self.bounds, maskRef); //respect alpha mask
CGContextSetBlendMode(context, kCGBlendModeColorBurn); //set blending mode
[cachedImage drawAtPoint:CGPointZero];
Вы можете сохранить свой CGPath как член своего класса. И используйте это в методе рисования, вам нужно будет создать путь только при изменении точек, но не каждый раз, когда представление перерисовывается, если точки являются инкрементными, просто продолжайте добавлять эллипсы к пути. В методе drawRect вам нужно будет только добавить путь
CGContextAddPath(context,dotsPath);
-(CGMutablePathRef)createPath
{
CGMutablePathRef dotsPath = CGPathCreateMutable();
for (Drop *drop in myPoints) {
CGPathAddEllipseInRect ( dotsPath,NULL,
CGRectMake(drop.point.x - drop.size/2, drop.point.y - drop.size/2, drop.size, drop.size));
}
return dotsPath;
}
Если я правильно понимаю вашу проблему, я бы попробовал рисовать на CGBitmapContext
вместо экрана прямо. Затем в drawRect
нарисуйте только ту часть предварительно обработанного растрового изображения, которая необходима из параметра rect
.
Если вы можете кэшировать рисунок как изображение, вы можете воспользоваться поддержкой CoreAnimation UIView. Это будет намного быстрее, чем использование Quartz, поскольку Quartz выполняет рисование в программном обеспечении.
- (CGImageRef)cachedImage {
/// Draw to an image, return that
}
- (void)refreshCache {
myView.layer.contents = [self cachedImage];
}
- (void)actionThatChangesWhatNeedsToBeDrawn {
[self refreshCache];
}