2009-08-31 1 views
0

Я хотел сделать круговой preloader в моем приложении для iPhone, но боролся с чего начать. Я использовал Sequel Pro сегодня и увидел, что у них есть именно то, что я хотел, и это с открытым исходным кодом, поэтому я загрузил источник и ничего не нашел.Circule Preloader в Objective C

Я просто ищу для начала о том, как сделать что-то вдоль линий:

alt text http://www.grabup.com/uploads/c7b2d101cd9caf0d927c2fa8a7850ba2.png

или

alt text http://www.grabup.com/uploads/fc8520a4425331a3a6a0cbf6508b510f.png

Я нашел несколько флэш-учебники, но это трудно перевести это в полезный код в Objective-C.

Заранее спасибо.

ответ

3

Нетрудно создать подкласс UIView для этой цели. В подклассе вы хотели бы сделать примерно следующее в drawRect рутина:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGFloat  center_x = self.frame.size.width/2; 
CGFloat  center_y = self.frame.size.height/2; 
double  progress = 0.42; // A floating-point number from 0..1 inclusively 

// draw the frame 
CGContextAddArc(context, 
       center_x, 
       center_y, 
       std::min(self.frame.size.width, self.frame.size.height), 
       0, 
       M_PI * 2, 
       1 /*clockwise*/); 
CGContextStrokePath(context); 

// draw the progress indicator 
CGContextAddArc(context, 
       center_x, 
       center_y, 
       std::min(self.frame.size.width, self.frame.size.height), 
       0, 
       M_PI * 2 * progress, 
       1 /*clockwise*/); 
CGContextFillPath(context); 
+0

Незначительная точка: те переменные CGPoint должны быть объявлены как CGFloat. – Don

0

Вы имеете в виду индикатор прогресса, например, один включенный в Interface Builder, но циркуляр? Я предполагаю, что в структуре Flex есть стандартная версия, для которой вы видели учебники.

Я думаю, вам придется сделать это самостоятельно. То, что вы можете сделать, это иметь представление, которое слушает уведомления о прогрессе от объекта. Когда он их получит, вы должны вычислить изображение для отображения и вызвать метод viewNeedsDisplay.

Я быстро взглянул на источник Sequel Pro, и я думаю, что вы ищете NSProgressIndicator. Но Sequel Pro - настольное приложение и обладает большей гибкостью, чем iPhone. Эквивалент Cocoa Touch будет UIActivityIndicatorView, который всегда неопределен (т. Е. Вы не можете указать процент завершен).

Редактировать: да, см. Код fbrereton выше для процедуры рисования.

А вот как бы вы слушать уведомления, чтобы получить, что прогресс значение с плавающей точкой:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(receivedProgress:) 
               name:@"MyProgressIndication" 
               object:nil]; 

Вы бы разместить их от объекта, который делает работу, как это:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyProgressIndication" 
                 object:[NSNumber numberFromFloat:progress]]; 

Постоянным для имени уведомления было бы лучше.

1

Вы должны использовать библиотеку AnimatedGif и загружать анимированный GIF из preloaders.net или что-то в этом роде.

Просто сделайте это программно (без IB). Это очень просто. Вот код:

AnimatedGif *animatedGif = [[[AnimatedGif alloc] init] autorelease];  
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"circle-loader" ofType:@"gif"]]; 
[animatedGif decodeGIF: data]; 
self.loadingImage = [animatedGif getAnimation]; //self.loadingImage is a UIImageView 
[self.view addSubview:loadingImage]; 

Потом, позже, когда вы хотите удалить GIF:

[loadingImage removeFromSuperview]; 
[loadingImage release]; 

 Смежные вопросы

  • Нет связанных вопросов^_^