Предварительный загрузчик круга в Задаче C - PullRequest
0 голосов
/ 01 сентября 2009

Я давно хотел сделать предварительный загрузчик в своем приложении для iPhone, но изо всех сил пытался с чего начать. Сегодня я использовал Sequel Pro и увидел, что у них есть именно то, что я хотел, и это открытый исходный код, поэтому я скачал исходник и ничего не смог найти.

Я просто хочу начать с того, как сделать что-то вроде:

альтернативный текст http://www.grabup.com/uploads/c7b2d101cd9caf0d927c2fa8a7850ba2.png

или

альтернативный текст http://www.grabup.com/uploads/fc8520a4425331a3a6a0cbf6508b510f.png

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

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

Ответы [ 4 ]

3 голосов
/ 01 сентября 2009

Для этого не составит труда создать подкласс 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);
1 голос
/ 27 августа 2010

Библиотека AnimatedGif (ссылка выше) работает очень хорошо. Пришлось копать, чтобы найти его здесь: http://blog.stijnspijker.nl/2009/07/animated-and-transparent-gifs-for-iphone-made-easy/

1 голос
/ 03 сентября 2009

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

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

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];
0 голосов
/ 01 сентября 2009

Вы имеете в виду индикатор прогресса, такой как тот, который включен в Интерфейсный Разработчик, но круговой? Я предполагаю, что в платформе 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]];

Лучше всего использовать константу для имени уведомления.

...