views:

50

answers:

1

My problem : the color of the fill in square go from black to full blue (255) with no transition color (darkest blue, dark blue, blue...). It seems that the CGContextSetRGBStroke is additive (WTF Oo) . like if the blue was 14 and the next update I put 140 the blue will be 154 and not 140 has I set.

Is someone get that problem ?

in the .h

    CGFloat angle;
    int width;
    int height;
    NSTimer* timer; 
    CGPoint touch;

in the .m

 - (id)initWithFrame:(CGRect)frame 
{
  if ((self = [super initWithFrame:frame])) 
    {
 angle=0;
 width = frame.size.width;
 height= frame.size.height;
 //self.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:1 alpha:1];
 timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(update:) userInfo:nil repeats:YES];
    }
    return self;
}

 -(void)update:(NSTimer*)theTimer
  {
     [self setNeedsDisplay];
  }

 NS_INLINE CGFloat radians(CGFloat ang)
 {
  return ang*(M_PI/180.0f);
 }

 - (void)drawRect:(CGRect)rect 
 {
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    //CGContextSetRGBFillColor(ctx, -1,-1,-1,-1);

    CGContextSaveGState(ctx);
    CGRect ourRect = CGRectMake(40+angle, 40+angle, 240, 120);

    CGFloat colour=(touch.y/768)*255;
    NSQLog(@"draw %f",colour);
    CGContextSetRGBFillColor(ctx, 0.0,0.0,colour,1);
    CGContextClearRect(ctx, rect);

    CGContextFillRect(ctx, ourRect);

    CGContextSetRGBStrokeColor(ctx, 0.0, 1.0, 0.0, 1.0);
    CGContextStrokeRectWithWidth(ctx, ourRect, 10);
    CGContextRestoreGState(ctx);

    angle+=1;  
 }

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
       touch= [[touches anyObject] locationInView:self];
 }

 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
 {
       touch= [[touches anyObject] locationInView:self]; 
  }
A: 

Just a quick answer as I'm seeing the following lines:

CGFloat colour=(touch.y/768)*255;
CGContextSetRGBFillColor(ctx, 0.0,0.0,colour,1);

You should specify the color parts as a CGFloat ranging from 0.0f to 1.0f. Could it be your blue color part is in the "0 to 255 mode"?

Edit

Judging by your code, I think you can leave out the multiply by 255 in the color calculation. When y is 0 you'll have 0.0f as blue color component and when y is 768 it'll be 1.0f.

Yannick Compernol
TRUE !!! I was using Processing to test the graphics code and forget that to change the 0-255 range color to 0-1 range. Thks ... 1 day to find it... Sincerely thk
xeonarno
If my post was helpful, care to mark it as the accepted answer?
Yannick Compernol