0

I have an app that basically is a ring size app, I have stored all the CGRect frames in an array and then I pass them into a UIView class. So you can navigate through the array changing the size of the circle.

Works fine on all iOS7 devices, however on an iPad 3 running iOS6 the circle is displaying a different size to that of an iPad mini running iOS7.

What would be causing the discrepancy?

My drawrect code is as follows:

- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(ctx, 0);

    CGRect circlePoint = arect;
    CGContextFillEllipseInRect(ctx, circlePoint);

    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = [UIColorFromRGB(0xecc7da) newGradientToColor:UIColorFromRGB(0xcc6699)];
    CGColorSpaceRelease(baseSpace), baseSpace = NULL;

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);
    CGContextAddEllipseInRect(context, arect);
    CGContextClip(context);

    CGPoint gradCenter = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
    float gradRadius = MIN(arect.size.width , arect.size.height) ;

    CGContextDrawRadialGradient (context, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation);

    CGGradientRelease(gradient), gradient = NULL;

    CGContextRestoreGState(context);

    CGContextAddEllipseInRect(context, arect);
    CGContextDrawPath(context, kCGPathStroke);
}

Ok so an update, here is myView.h file :

#import <UIKit/UIKit.h>

@interface myView : UIView{
CGRect arect;
}

- (id)initWithFrame:(CGRect)frame shaperect:(CGRect)shaperect;

@end

And .m file:

#import "myView.h"
#import "UIColor+EasyGradients.h"

@implementation myView

- (id)initWithFrame:(CGRect)frame shaperect:(CGRect)shaperect;
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

        arect = shaperect;

    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(ctx, 0);

    CGRect circlePoint = arect;
    CGContextFillEllipseInRect(ctx, circlePoint);

    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = [UIColorFromRGB(0xecc7da) newGradientToColor:UIColorFromRGB(0xcc6699)];
    CGColorSpaceRelease(baseSpace), baseSpace = NULL;

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);
    CGContextAddEllipseInRect(context, arect);
    NSLog(@"x = %f | y = %f | w = %f | h = %f", arect.origin.x, arect.origin.y, arect.size.width, arect.size.height);
    CGContextClip(context);

    CGPoint gradCenter = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
    float gradRadius = MIN(arect.size.width , arect.size.height) ;

    CGContextDrawRadialGradient (context, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation);


    CGGradientRelease(gradient), gradient = NULL;

    CGContextRestoreGState(context);

    CGContextAddEllipseInRect(context, arect);
    CGContextDrawPath(context, kCGPathStroke);

}

That file gets called and used from my viewcontroller whos .m code is something like this:

myView *myViewx = [[myView alloc] initWithFrame: container shaperect:  CGRectFromString([arrayofRects objectForKey:@"0"])];
    myViewx.backgroundColor = [UIColor clearColor];
    myViewx.tag = 7;

    [self.view addSubview:myViewx];
4

0 回答 0