Customize the Look of an UIAlertView

231 views
Skip to first unread message

Biacho

unread,
May 4, 2012, 9:19:15 AM5/4/12
to iphone-appd...@googlegroups.com
Hello,

Somebody was doing something like this ? I mean completely change UIAlertView design ? 
I need to change this look for my App but Google doesn't want help me in this case.

Plz help... 

Nielson Rolim

unread,
May 4, 2012, 10:18:20 AM5/4/12
to iphone-appd...@googlegroups.com
Hi Biacho,

I found this class, but I don't remember where... You can custom the UIAlertView, change the borders, the background, etc.

I'm using it to display a RED alert view instead of the default blue one.


#import <UIKit/UIKit.h>

@interface CustomAlert : UIAlertView
+ (void) setBackgroundColor:(UIColor *) background 
            withStrokeColor:(UIColor *) stroke;
@end




#import "CustomAlert.h"

@interface CustomAlert (Private)

- (void) drawRoundedRect:(CGRect) rect inContext:(CGContextRef
context withRadius:(CGFloat) radius;

@end

static UIColor *fillColor = nil;
static UIColor *borderColor = nil;

@implementation CustomAlert

+ (void) setBackgroundColor:(UIColor *) background 
            withStrokeColor:(UIColor *) stroke
{
if(fillColor != nil)
{
fillColor = nil;
borderColor = nil;
}

    

fillColor = background;
borderColor = stroke;
}

- (id)initWithFrame:(CGRect)frame
{
    if((self = [super initWithFrame:frame]))
{
        if(fillColor == nil)
{
fillColor = [UIColor blackColor];
borderColor = [UIColor colorWithHue:0.625 
                                      saturation:0.0 brightness:0.8 alpha:0.8];
}
    }

    

    return self;
}

- (void)layoutSubviews
{
for (UIView *sub in [self subviews])
{
if([sub class] == [UIImageView class] && sub.tag == 0)
{
// The alert background UIImageView tag is 0, 
// if you are adding your own UIImageView's 
// make sure your tags != 0 or this fix 
// will remove your UIImageView's as well!
[sub removeFromSuperview];
break;
}
}
}

- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();

    

CGContextClearRect(context, rect);
CGContextSetAllowsAntialiasing(context, true);
CGContextSetLineWidth(context, 0.0);
CGContextSetAlpha(context, 0.8); 
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [borderColor CGColor]);
CGContextSetFillColorWithColor(context, [fillColor CGColor]);

    

// Draw background
CGFloat backOffset = 2;
CGRect backRect = CGRectMake(rect.origin.x + backOffset, 
                                 rect.origin.y + backOffset, 
                                 rect.size.width - backOffset*2, 
                                 rect.size.height - backOffset*2);

    

[self drawRoundedRect:backRect inContext:context withRadius:8];
CGContextDrawPath(context, kCGPathFillStroke);

    

// Clip Context
CGRect clipRect = CGRectMake(backRect.origin.x + backOffset-1, 
                                 backRect.origin.y + backOffset-1, 
                                 backRect.size.width - (backOffset-1)*2, 
                                 backRect.size.height - (backOffset-1)*2);

    

[self drawRoundedRect:clipRect inContext:context withRadius:8];
CGContextClip (context);

    

//Draw highlight
CGGradientRef glossGradient;
CGColorSpaceRef rgbColorspace;
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 1.0, 1.0, 1.0, 0.35, 1.0, 1.0, 1.0, 0.06 };
rgbColorspace = CGColorSpaceCreateDeviceRGB();
glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, 
                                                        components, locations, num_locations);

    

CGRect ovalRect = CGRectMake(-130, -115, (rect.size.width*2), 
                                 rect.size.width/2);

    

CGPoint start = CGPointMake(rect.origin.x, rect.origin.y);
CGPoint end = CGPointMake(rect.origin.x, rect.size.height/5);

    

CGContextSetAlpha(context, 1.0); 
CGContextAddEllipseInRect(context, ovalRect);
CGContextClip (context);

    

CGContextDrawLinearGradient(context, glossGradient, start, end, 0);

    

CGGradientRelease(glossGradient);
CGColorSpaceRelease(rgbColorspace); 
}

- (void) drawRoundedRect:(CGRect) rrect inContext:(CGContextRef) context 
              withRadius:(CGFloat) radius
{
CGContextBeginPath (context);

    

CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), 
    maxx = CGRectGetMaxX(rrect);

    

CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), 
    maxy = CGRectGetMaxY(rrect);

    

CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClosePath(context);
}

@end



--
You received this message because you are subscribed to the Google Groups "iPhone Application Development Auditors" group.
To view this discussion on the web visit https://groups.google.com/d/msg/iphone-appdev-auditors/-/2EetAIRkvZ4J.
To post to this group, send email to iphone-appd...@googlegroups.com.
To unsubscribe from this group, send email to iphone-appdev-aud...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/iphone-appdev-auditors?hl=en.

Reply all
Reply to author
Forward
0 new messages