summaryrefslogtreecommitdiff
path: root/Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockBackground.m
diff options
context:
space:
mode:
Diffstat (limited to 'Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockBackground.m')
-rw-r--r--Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockBackground.m229
1 files changed, 229 insertions, 0 deletions
diff --git a/Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockBackground.m b/Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockBackground.m
new file mode 100644
index 0000000..79093cc
--- /dev/null
+++ b/Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockBackground.m
@@ -0,0 +1,229 @@
+//
+// BlockBackground.m
+// arrived
+//
+// Created by Gustavo Ambrozio on 29/11/11.
+// Copyright (c) 2011 N/A. All rights reserved.
+//
+
+#import "BlockBackground.h"
+
+@implementation BlockBackground
+
+@synthesize backgroundImage = _backgroundImage;
+@synthesize vignetteBackground = _vignetteBackground;
+
+static BlockBackground *_sharedInstance = nil;
+
++ (BlockBackground*)sharedInstance
+{
+ if (_sharedInstance != nil) {
+ return _sharedInstance;
+ }
+
+ @synchronized(self) {
+ if (_sharedInstance == nil) {
+ _sharedInstance = [[self alloc] init];
+ }
+ }
+
+ return _sharedInstance;
+}
+
++ (id)allocWithZone:(NSZone*)zone
+{
+ @synchronized(self) {
+ if (_sharedInstance == nil) {
+ _sharedInstance = [super allocWithZone:zone];
+ return _sharedInstance;
+ }
+ }
+ NSAssert(NO, @ "[BlockBackground alloc] explicitly called on singleton class.");
+ return nil;
+}
+
+- (id)copyWithZone:(NSZone*)zone
+{
+ return self;
+}
+
+- (id)retain
+{
+ return self;
+}
+
+- (unsigned)retainCount
+{
+ return UINT_MAX;
+}
+
+- (oneway void)release
+{
+}
+
+- (id)autorelease
+{
+ return self;
+}
+
+- (void)setRotation:(NSNotification*)notification
+{
+ UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
+
+ CGRect orientationFrame = [UIScreen mainScreen].bounds;
+
+ if(
+ (UIInterfaceOrientationIsLandscape(orientation) && orientationFrame.size.height > orientationFrame.size.width) ||
+ (UIInterfaceOrientationIsPortrait(orientation) && orientationFrame.size.width > orientationFrame.size.height)
+ ) {
+ float temp = orientationFrame.size.width;
+ orientationFrame.size.width = orientationFrame.size.height;
+ orientationFrame.size.height = temp;
+ }
+
+ self.transform = CGAffineTransformIdentity;
+ self.frame = orientationFrame;
+
+ CGFloat posY = orientationFrame.size.height/2;
+ CGFloat posX = orientationFrame.size.width/2;
+
+ CGPoint newCenter;
+ CGFloat rotateAngle;
+
+ switch (orientation) {
+ case UIInterfaceOrientationPortraitUpsideDown:
+ rotateAngle = M_PI;
+ newCenter = CGPointMake(posX, orientationFrame.size.height-posY);
+ break;
+ case UIInterfaceOrientationLandscapeLeft:
+ rotateAngle = -M_PI/2.0f;
+ newCenter = CGPointMake(posY, posX);
+ break;
+ case UIInterfaceOrientationLandscapeRight:
+ rotateAngle = M_PI/2.0f;
+ newCenter = CGPointMake(orientationFrame.size.height-posY, posX);
+ break;
+ default: // UIInterfaceOrientationPortrait
+ rotateAngle = 0.0;
+ newCenter = CGPointMake(posX, posY);
+ break;
+ }
+
+ self.transform = CGAffineTransformMakeRotation(rotateAngle);
+ self.center = newCenter;
+
+ [self setNeedsLayout];
+ [self layoutSubviews];
+}
+
+- (id)init
+{
+ self = [super initWithFrame:[[UIScreen mainScreen] bounds]];
+ if (self) {
+ self.windowLevel = UIWindowLevelStatusBar;
+ self.hidden = YES;
+ self.userInteractionEnabled = NO;
+ self.backgroundColor = [UIColor colorWithWhite:0.4 alpha:0.5f];
+ self.vignetteBackground = NO;
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(setRotation:)
+ name:UIApplicationDidChangeStatusBarOrientationNotification
+ object:nil];
+ [self setRotation:nil];
+
+ }
+ return self;
+}
+
+- (void)addToMainWindow:(UIView *)view
+{
+ [self setRotation:nil];
+
+ if ([self.subviews containsObject:view]) return;
+
+ if (self.hidden)
+ {
+ _previousKeyWindow = [[[UIApplication sharedApplication] keyWindow] retain];
+ self.alpha = 0.0f;
+ self.hidden = NO;
+ [self makeKeyWindow];
+ }
+
+ // if something's been added to this window, then this window should have interaction
+ self.userInteractionEnabled = YES;
+
+ if (self.subviews.count > 0)
+ {
+ ((UIView*)[self.subviews lastObject]).userInteractionEnabled = NO;
+ }
+
+ if (_backgroundImage)
+ {
+ UIImageView *backgroundView = [[UIImageView alloc] initWithImage:_backgroundImage];
+ backgroundView.frame = self.bounds;
+ backgroundView.contentMode = UIViewContentModeScaleToFill;
+ [self addSubview:backgroundView];
+ [backgroundView release];
+ [_backgroundImage release];
+ _backgroundImage = nil;
+ }
+
+ [self addSubview:view];
+}
+
+- (void)reduceAlphaIfEmpty
+{
+ if (self.subviews.count == 1 || (self.subviews.count == 2 && [[self.subviews objectAtIndex:0] isKindOfClass:[UIImageView class]]))
+ {
+ self.alpha = 0.0f;
+ self.userInteractionEnabled = NO;
+ }
+}
+
+- (void)removeView:(UIView *)view
+{
+ [view removeFromSuperview];
+
+ UIView *topView = [self.subviews lastObject];
+ if ([topView isKindOfClass:[UIImageView class]])
+ {
+ // It's a background. Remove it too
+ [topView removeFromSuperview];
+ }
+
+ if (self.subviews.count == 0)
+ {
+ self.hidden = YES;
+ [_previousKeyWindow makeKeyWindow];
+ [_previousKeyWindow release];
+ _previousKeyWindow = nil;
+ }
+ else
+ {
+ ((UIView*)[self.subviews lastObject]).userInteractionEnabled = YES;
+ }
+}
+
+- (void)drawRect:(CGRect)rect
+{
+ if (_backgroundImage || !_vignetteBackground) return;
+ CGContextRef context = UIGraphicsGetCurrentContext();
+
+ size_t locationsCount = 2;
+ CGFloat locations[2] = {0.0f, 1.0f};
+ CGFloat colors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f};
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+ CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, locationsCount);
+ CGColorSpaceRelease(colorSpace);
+
+ CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
+ float radius = MIN(self.bounds.size.width , self.bounds.size.height) ;
+ CGContextDrawRadialGradient (context, gradient, center, 0, center, radius, kCGGradientDrawsAfterEndLocation);
+ CGGradientRelease(gradient);
+}
+
+
+
+
+@end