{{{ #!html
Barackula from mark mannschreck on Vimeo. }}} {{{ for(NSString* family in [UIFont familyNames]){ Debug(@"%@ %@",family, [UIFont fontNamesForFamilyName:family]); } }}} {{{ #import "MATCAlertView.h" @implementation MATCAlertView #pragma mark - #pragma mark Initialization and teardown - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { // Initialization code } return self; } - (void)dealloc { [super dealloc]; } #pragma mark - #pragma mark Drawing methods + (CGColorSpaceRef)genericRGBSpace; { static CGColorSpaceRef space = NULL; if (space == NULL) { space = CGColorSpaceCreateDeviceRGB(); } return space; } + (CGColorRef)whiteColor; { static CGColorRef white = NULL; if (white == NULL) { CGFloat values[4] = {1.0, 1.0, 1.0, 1.0}; white = CGColorCreate([self genericRGBSpace], values); } return white; } + (CGColorRef)shadowColor; { static CGColorRef shadowColor = NULL; if (shadowColor == NULL) { CGFloat values[4] = {0.0, 0.0, 0.0, 0.5}; shadowColor = CGColorCreate([self genericRGBSpace], values); } return shadowColor; } + (CGColorRef)translucentBlueColor; { static CGColorRef translucentBlue = NULL; if (translucentBlue == NULL) { CGFloat values[4] = {0.13, 0.24, 0.44, 0.7}; translucentBlue = CGColorCreate([self genericRGBSpace], values); } return translucentBlue; } - (void)drawRect:(CGRect)rect { CGFloat shadowRadius = 4.0f; CGContextRef context = UIGraphicsGetCurrentContext(); CGRect currentBounds = self.bounds; CGContextSaveGState(context); // Set up the shadow around the view, which requires a slight inset on the view CGContextSetShadowWithColor( context, CGSizeMake(0.0f, -shadowRadius), shadowRadius, [MATCAlertView shadowColor] ); // Draw the blue background rectangle and border CGContextSetLineWidth(context, 2.0f); CGContextSetStrokeColorWithColor(context, [MATCAlertView whiteColor]); CGContextSetFillColorWithColor(context, [MATCAlertView translucentBlueColor]); CGFloat cornerRadius = 5.0f; CGRect actualViewRect = CGRectMake(shadowRadius + 0.5, 1.5f, currentBounds.size.width - shadowRadius * 2.0f, currentBounds.size.height - shadowRadius*2.5f); CGContextBeginPath(context); CGContextMoveToPoint(context, CGRectGetMinX(actualViewRect) + cornerRadius + 0.5, CGRectGetMinY(actualViewRect) + 0.5); CGContextAddArc(context, CGRectGetMaxX(actualViewRect) - cornerRadius + 0.5, CGRectGetMinY(actualViewRect) + cornerRadius + 0.5, cornerRadius, 3 * M_PI / 2, 0, 0); CGContextAddArc(context, CGRectGetMaxX(actualViewRect) - cornerRadius + 0.5, CGRectGetMaxY(actualViewRect) - cornerRadius + 0.5, cornerRadius, 0, M_PI / 2, 0); CGContextAddArc(context, CGRectGetMinX(actualViewRect) + cornerRadius + 0.5, CGRectGetMaxY(actualViewRect) - cornerRadius + 0.5, cornerRadius, M_PI / 2, M_PI, 0); CGContextAddArc(context, CGRectGetMinX(actualViewRect) + cornerRadius + 0.5, CGRectGetMinY(actualViewRect) + cornerRadius + 0.5, cornerRadius, M_PI, 3 * M_PI / 2, 0); CGContextClosePath(context); CGContextDrawPath(context, kCGPathFillStroke); CGContextRestoreGState(context); // // // Clip the gloss clipping path to the rounded rectangle // CGContextBeginPath(context); // CGContextMoveToPoint(context, CGRectGetMinX(actualViewRect) + cornerRadius + 0.5, CGRectGetMinY(actualViewRect) + 0.5); // CGContextAddArc(context, CGRectGetMaxX(actualViewRect) - cornerRadius + 0.5, CGRectGetMinY(actualViewRect) + cornerRadius + 0.5, cornerRadius, 3 * M_PI / 2, 0, 0); // CGContextAddArc(context, CGRectGetMaxX(actualViewRect) - cornerRadius + 0.5, CGRectGetMaxY(actualViewRect) - cornerRadius + 0.5, cornerRadius, 0, M_PI / 2, 0); // CGContextAddArc(context, CGRectGetMinX(actualViewRect) + cornerRadius + 0.5, CGRectGetMaxY(actualViewRect) - cornerRadius + 0.5, cornerRadius, M_PI / 2, M_PI, 0); // CGContextAddArc(context, CGRectGetMinX(actualViewRect) + cornerRadius + 0.5, CGRectGetMinY(actualViewRect) + cornerRadius + 0.5, cornerRadius, M_PI, 3 * M_PI / 2, 0); // CGContextClosePath(context); // CGContextClip(context); // // // Set up a clipping path for the gloss gradient // CGFloat glossRadius = 600.0f; // CGPoint glossCenterPoint = CGPointMake(CGRectGetMidX(currentBounds), 30.0 - glossRadius); // CGContextBeginPath(context); // CGContextMoveToPoint(context, glossCenterPoint.x, glossCenterPoint.y); // CGContextAddArc(context, glossCenterPoint.x, glossCenterPoint.y, glossRadius, 0.0, M_PI, 0 // ); // CGContextClosePath(context); // CGContextClip(context); // // // Draw the gloss gradient CGGradientRef glossGradient; CGFloat locations[2] = { 0.0, 1.0 }; CGFloat components[8] = { 1.0, 1.0, 1.0, 0.65, // Start color 1.0, 1.0, 1.0, 0.06 }; // End color glossGradient = CGGradientCreateWithColorComponents([MATCAlertView genericRGBSpace], components, locations, 2); CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f); CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), 30.0f); CGContextDrawLinearGradient(context, glossGradient, topCenter, midCenter, 0); CGGradientRelease(glossGradient); } @end }}}