我一直想在我的iPhone应用程序中制作循环预加载器,但一直在努力开始。我今天正在使用Sequel Pro,看到它们正是我想要的,而且它是开源的,所以我下载了源代码,找不到任何东西。
我正在寻找一个如何制定以下内容的开始:
alt text http://www.grabup.com/uploads/c7b2d101cd9caf0d927c2fa8a7850ba2.png
或
alt text http://www.grabup.com/uploads/fc8520a4425331a3a6a0cbf6508b510f.png
我找到了一些flash教程,但很难将其转换为Objective-C中的可用代码。
提前致谢。
答案 0 :(得分: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);
答案 1 :(得分:1)
您应该使用AnimatedGif库,并从preloaders.net下载动画GIF。
只是以编程方式(没有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];
答案 2 :(得分:1)
AnimatedGif(上面引用)库工作得很好。不得不在这里找到它:http://blog.stijnspijker.nl/2009/07/animated-and-transparent-gifs-for-iphone-made-easy/
答案 3 :(得分: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]];
通知名称的常量最好。