目标C中的圆形预加载器

时间:2009-08-31 21:04:01

标签: objective-c preloader

我一直想在我的iPhone应用程序中制作循环预加载器,但一直在努力开始。我今天正在使用Sequel Pro,看到它们正是我想要的,而且它是开源的,所以我下载了源代码,找不到任何东西。

我正在寻找一个如何制定以下内容的开始:

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

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

我找到了一些flash教程,但很难将其转换为Objective-C中的可用代码。

提前致谢。

4 个答案:

答案 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等效的是UIActivityIndi​​catorView,它始终是不确定的(即,你不能指定完成的百分比)。

编辑:是的,请参阅上面的fbrereton代码以了解绘图程序。

以下是您如何监听通知以获得浮点值的进展:

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

你可以从正在做这项工作的对象发布它们:

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

通知名称的常量最好。