add test
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
//
|
||||
// NYPopover.m
|
||||
// NYReader
|
||||
//
|
||||
// Created by Cassius Pacheco on 21/12/12.
|
||||
// Copyright (c) 2012 Nyvra Software. All rights reserved.
|
||||
//
|
||||
|
||||
#import "NYPopover.h"
|
||||
|
||||
@implementation NYPopover
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
|
||||
self.textLabel = [[UILabel alloc] initWithFrame:CGRectZero];
|
||||
self.textLabel.backgroundColor = [UIColor clearColor];
|
||||
self.textLabel.textColor = [UIColor whiteColor];
|
||||
self.textLabel.font = [UIFont boldSystemFontOfSize:13];
|
||||
self.textLabel.textAlignment = NSTextAlignmentCenter;
|
||||
self.textLabel.adjustsFontSizeToFitWidth = YES;
|
||||
self.opaque = NO;
|
||||
|
||||
[self addSubview:self.textLabel];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setFrame:(CGRect)frame
|
||||
{
|
||||
[super setFrame:frame];
|
||||
|
||||
CGFloat y = (frame.size.height - 26) / 3;
|
||||
|
||||
if (frame.size.height < 38)
|
||||
y = 0;
|
||||
|
||||
self.textLabel.frame = CGRectMake(0, y, frame.size.width, 26);
|
||||
}
|
||||
|
||||
- (void)drawRect:(CGRect)rect
|
||||
{
|
||||
//// General Declarations
|
||||
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||
CGContextRef context = UIGraphicsGetCurrentContext();
|
||||
|
||||
//// Color Declarations
|
||||
UIColor* gradientColor = [UIColor colorWithRed: 0.267 green: 0.303 blue: 0.335 alpha: 1];
|
||||
UIColor* gradientColor2 = [UIColor colorWithRed: 0.04 green: 0.04 blue: 0.04 alpha: 1];
|
||||
UIColor* shadowColor2 = [UIColor colorWithRed: 0.524 green: 0.553 blue: 0.581 alpha: 0.3];
|
||||
|
||||
//// Gradient Declarations
|
||||
NSArray* gradientColors = [NSArray arrayWithObjects:
|
||||
(id)gradientColor.CGColor,
|
||||
(id)gradientColor2.CGColor, nil];
|
||||
CGFloat gradientLocations[] = {0, 1};
|
||||
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)gradientColors, gradientLocations);
|
||||
|
||||
//// Shadow Declarations
|
||||
UIColor* innerShadow = shadowColor2;
|
||||
CGSize innerShadowOffset = CGSizeMake(0, 1.5);
|
||||
CGFloat innerShadowBlurRadius = 0.5;
|
||||
|
||||
//// Frames
|
||||
CGRect frame = self.bounds;
|
||||
|
||||
//// Subframes
|
||||
CGRect frame2 = CGRectMake(CGRectGetMinX(frame) + floor((CGRectGetWidth(frame) - 11) * 0.51724 + 0.5), CGRectGetMinY(frame) + CGRectGetHeight(frame) - 9, 11, 9);
|
||||
|
||||
|
||||
//// Bezier Drawing
|
||||
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
|
||||
[bezierPath moveToPoint: CGPointMake(CGRectGetMaxX(frame) - 0.5, CGRectGetMinY(frame) + 4.5)];
|
||||
[bezierPath addLineToPoint: CGPointMake(CGRectGetMaxX(frame) - 0.5, CGRectGetMaxY(frame) - 11.5)];
|
||||
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMaxX(frame) - 4.5, CGRectGetMaxY(frame) - 7.5) controlPoint1: CGPointMake(CGRectGetMaxX(frame) - 0.5, CGRectGetMaxY(frame) - 9.29) controlPoint2: CGPointMake(CGRectGetMaxX(frame) - 2.29, CGRectGetMaxY(frame) - 7.5)];
|
||||
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame2) + 10.64, CGRectGetMinY(frame2) + 1.5)];
|
||||
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame2) + 5.5, CGRectGetMinY(frame2) + 8)];
|
||||
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame2) + 0.36, CGRectGetMinY(frame2) + 1.5)];
|
||||
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 4.5, CGRectGetMaxY(frame) - 7.5)];
|
||||
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 0.5, CGRectGetMaxY(frame) - 11.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 2.29, CGRectGetMaxY(frame) - 7.5) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 0.5, CGRectGetMaxY(frame) - 9.29)];
|
||||
[bezierPath addLineToPoint: CGPointMake(CGRectGetMinX(frame) + 0.5, CGRectGetMinY(frame) + 4.5)];
|
||||
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMinX(frame) + 4.5, CGRectGetMinY(frame) + 0.5) controlPoint1: CGPointMake(CGRectGetMinX(frame) + 0.5, CGRectGetMinY(frame) + 2.29) controlPoint2: CGPointMake(CGRectGetMinX(frame) + 2.29, CGRectGetMinY(frame) + 0.5)];
|
||||
[bezierPath addLineToPoint: CGPointMake(CGRectGetMaxX(frame) - 4.5, CGRectGetMinY(frame) + 0.5)];
|
||||
[bezierPath addCurveToPoint: CGPointMake(CGRectGetMaxX(frame) - 0.5, CGRectGetMinY(frame) + 4.5) controlPoint1: CGPointMake(CGRectGetMaxX(frame) - 2.29, CGRectGetMinY(frame) + 0.5) controlPoint2: CGPointMake(CGRectGetMaxX(frame) - 0.5, CGRectGetMinY(frame) + 2.29)];
|
||||
[bezierPath closePath];
|
||||
CGContextSaveGState(context);
|
||||
[bezierPath addClip];
|
||||
CGRect bezierBounds = bezierPath.bounds;
|
||||
CGContextDrawLinearGradient(context, gradient,
|
||||
CGPointMake(CGRectGetMidX(bezierBounds), CGRectGetMinY(bezierBounds)),
|
||||
CGPointMake(CGRectGetMidX(bezierBounds), CGRectGetMaxY(bezierBounds)),
|
||||
0);
|
||||
CGContextRestoreGState(context);
|
||||
|
||||
////// Bezier Inner Shadow
|
||||
CGRect bezierBorderRect = CGRectInset([bezierPath bounds], -innerShadowBlurRadius, -innerShadowBlurRadius);
|
||||
bezierBorderRect = CGRectOffset(bezierBorderRect, -innerShadowOffset.width, -innerShadowOffset.height);
|
||||
bezierBorderRect = CGRectInset(CGRectUnion(bezierBorderRect, [bezierPath bounds]), -1, -1);
|
||||
|
||||
UIBezierPath* bezierNegativePath = [UIBezierPath bezierPathWithRect: bezierBorderRect];
|
||||
[bezierNegativePath appendPath: bezierPath];
|
||||
bezierNegativePath.usesEvenOddFillRule = YES;
|
||||
|
||||
CGContextSaveGState(context);
|
||||
{
|
||||
CGFloat xOffset = innerShadowOffset.width + round(bezierBorderRect.size.width);
|
||||
CGFloat yOffset = innerShadowOffset.height;
|
||||
CGContextSetShadowWithColor(context,
|
||||
CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)),
|
||||
innerShadowBlurRadius,
|
||||
innerShadow.CGColor);
|
||||
|
||||
[bezierPath addClip];
|
||||
CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(bezierBorderRect.size.width), 0);
|
||||
[bezierNegativePath applyTransform: transform];
|
||||
[[UIColor grayColor] setFill];
|
||||
[bezierNegativePath fill];
|
||||
}
|
||||
CGContextRestoreGState(context);
|
||||
|
||||
[[UIColor blackColor] setStroke];
|
||||
bezierPath.lineWidth = 1;
|
||||
[bezierPath stroke];
|
||||
|
||||
|
||||
//// Cleanup
|
||||
CGGradientRelease(gradient);
|
||||
CGColorSpaceRelease(colorSpace);
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user