View Full Version : Pulsating Color Background

Oct 4, 2010, 01:36 PM
Hi all,

I am extremely new to iPhone development and I was assigned the 'easy' task of creating a pulsating color background. Basically, I need the screen to pulsate different colors. I understand the logic behind it - I need a timer that changes the color every second, and I need to generate random colors to assign the background to. This is what I have so far..

#import <Foundation/Foundation.h>
#import <UIKit/UIkit.h>

@interface UIColorRandom {
+(UIColor *)randomColor;


#import "UIColorRandom.h"

@implementation UIColorRandom
+(UIColor *)randomColor
static BOOL seeded = NO; // tells us if it is the first time through this method
if (!seeded) { // after seeding has been done
seeded = YES; // seeded will change to YES so that it states it is not the first time

// generate random floats for rgb to make random colors values from 0.0 - 1.0
CGFloat red = (CGFloat)random()/(CGFloat)RAND_MAX;
CGFloat blue = (CGFloat)random()/(CGFloat)RAND_MAX;
CGFloat green = (CGFloat)random()/(CGFloat)RAND_MAX;
return[UIColor colorWithRed:red green:green blue:blue alpha:1.0];

#import "ColorPulseViewController.h"
#import "UIColorRandom.h"

@implementation ColorPulseViewController
[NSTimer scheduledTimerWithTimeInterval:1

UIColor *randColor = [UIColorRandom randomColor];
self.view.backgroundColor = randColor;

I don't get any error/warning messages during the build but it continues to crash.. this is the message that I get in the debugger window.

2010-10-04 14:23:45.976 ColorPulse[15819:207] ******* Accessibility Status Changed: On
2010-10-04 14:23:46.001 ColorPulse[15819:207] ********** Loading AX for: com.yourcompany.ColorPulse ************
2010-10-04 14:23:47.046 ColorPulse[15819:207] *** NSInvocation: warning: object 0x30a0 of class 'UIColorRandom' does not implement methodSignatureForSelector: -- trouble ahead
2010-10-04 14:23:47.047 ColorPulse[15819:207] *** NSInvocation: warning: object 0x30a0 of class 'UIColorRandom' does not implement doesNotRecognizeSelector: -- abort

I am extremely new to this.. and by new I mean I have just been introduced to this for less than a week now and I am suppose to learn this on my own. I have been doing all the tutorials but I can't seem to understand what is going on. I know this is a really easy task and that is why I am extremely frustrated I can't get it to work. Any help is greatly appreciated! Thanks !

Oct 4, 2010, 01:57 PM
Don't start your timer in loadView. Do this in viewDidLoad or viewWillAppear. And don't override loadView unless you know why you're doing it.

Oct 4, 2010, 02:02 PM
Look at your interface declaration for UIColorRandom. You have to make UIColorRandom a subclass of NSObject. :)

EDIT: The random color thing is actually well suited for an Objective-C category. (http://macdevelopertips.com/objective-c/objective-c-categories.html) For example:

#import <UIKit/UIKit.h>

@interface UIColor (UIColorAdditions)

+ (UIColor *)randomColor;

#import "UIColorAdditions.h"

CGFloat randomFloat() {
return ((CGFloat)random()) / ((CGFloat)RAND_MAX);

@implementation UIColor (UIColorAdditions)

+ (void)initialize {

+ (UIColor *)randomColor {
return [UIColor colorWithRed:randomFloat()


EDIT 2: I don't know what you mean by "plusating", but to me, it doesn't sound so much like setting random colors, but like smoothly stepping through the color palette. To do so, you would add a CGFloat instance variable named "hue" to your view controller. Then, modify pulseColor:
- (void)pulseColor {
hue = fmodf(hue + 0.01, 1.0);
[self.view setBackgroundColor:[UIColor colorWithHue:hue

Oct 4, 2010, 03:37 PM
Wow, that was a fairly simple fix. By 'pulsating' I just meant that the background color would change at a defined frequency being every second, so what you gave me initially worked like a charm since all I needed was to generate random colors to display.

Also, for future reference when would I need to initiate something in the following:


I just need a more pragmatic approach because clearly right now I am guessing and checking because I don't fully understand the differences.

This is just a threshold for what I want to actually accomplish. Ultimately I want the background color to change with each step an individual takes. I am assuming I am going to have to figure out how to use the accelerometers as pedometers, or find a way to integrate Nike+ data =D

It never ends..!! Any thoughts to where to begin?

Thanks again!

P.S Forgive my noobiness, you guys are great. I'll make sure that even though I am a noob I don't look like one in my posts =P

Oct 4, 2010, 04:39 PM
Read the View Controller Programming Guide, The Human Interface Guidelines, and the guides listed under getting started.

Then get books on Objective-C and iPhone programming and work through them.

You could also read the sticky at the top of the forum.