diff --git a/ChangingBackground.xcodeproj/project.pbxproj b/ChangingBackground.xcodeproj/project.pbxproj index 2e16be1..c8b78d2 100644 --- a/ChangingBackground.xcodeproj/project.pbxproj +++ b/ChangingBackground.xcodeproj/project.pbxproj @@ -24,6 +24,8 @@ 001809EC171C6764002D3E93 /* blue@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 001809E8171C6764002D3E93 /* blue@2x.png */; }; 001809ED171C6764002D3E93 /* green.png in Resources */ = {isa = PBXBuildFile; fileRef = 001809E9171C6764002D3E93 /* green.png */; }; 001809EE171C6764002D3E93 /* green@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 001809EA171C6764002D3E93 /* green@2x.png */; }; + DF1528581941206000770B11 /* TransitioningDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DF1528571941206000770B11 /* TransitioningDelegate.m */; }; + DF15285B194120A100770B11 /* AnimatedTransitioning.m in Sources */ = {isa = PBXBuildFile; fileRef = DF15285A194120A100770B11 /* AnimatedTransitioning.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -50,6 +52,10 @@ 001809E8171C6764002D3E93 /* blue@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue@2x.png"; sourceTree = ""; }; 001809E9171C6764002D3E93 /* green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = green.png; sourceTree = ""; }; 001809EA171C6764002D3E93 /* green@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "green@2x.png"; sourceTree = ""; }; + DF1528561941206000770B11 /* TransitioningDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransitioningDelegate.h; sourceTree = ""; }; + DF1528571941206000770B11 /* TransitioningDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TransitioningDelegate.m; sourceTree = ""; }; + DF152859194120A100770B11 /* AnimatedTransitioning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimatedTransitioning.h; sourceTree = ""; }; + DF15285A194120A100770B11 /* AnimatedTransitioning.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnimatedTransitioning.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -98,6 +104,7 @@ children = ( 001809EF171C6768002D3E93 /* BackgroundImages */, 001809D5171C63FC002D3E93 /* AppDelegate */, + DF1528551941201C00770B11 /* Transitioning */, 001809DC171C6453002D3E93 /* ViewControllers */, 001809BF171C637E002D3E93 /* Supporting Files */, ); @@ -167,6 +174,17 @@ name = BackgroundImages; sourceTree = ""; }; + DF1528551941201C00770B11 /* Transitioning */ = { + isa = PBXGroup; + children = ( + DF1528561941206000770B11 /* TransitioningDelegate.h */, + DF1528571941206000770B11 /* TransitioningDelegate.m */, + DF152859194120A100770B11 /* AnimatedTransitioning.h */, + DF15285A194120A100770B11 /* AnimatedTransitioning.m */, + ); + name = Transitioning; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -238,9 +256,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + DF1528581941206000770B11 /* TransitioningDelegate.m in Sources */, 001809C5171C637E002D3E93 /* main.m in Sources */, 001809C9171C637E002D3E93 /* AppDelegate.m in Sources */, 001809D9171C6448002D3E93 /* FirstViewController.m in Sources */, + DF15285B194120A100770B11 /* AnimatedTransitioning.m in Sources */, 001809E0171C64E4002D3E93 /* SecondViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -356,6 +376,7 @@ 001809D4171C637E002D3E93 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/ChangingBackground/AnimatedTransitioning.h b/ChangingBackground/AnimatedTransitioning.h new file mode 100644 index 0000000..6408f80 --- /dev/null +++ b/ChangingBackground/AnimatedTransitioning.h @@ -0,0 +1,15 @@ +// +// AnimatedTransitioning.h +// ChangingBackground +// +// Created by Christopher Gu on 6/5/14. +// Copyright (c) 2014 Ora Interactive. All rights reserved. +// + +#import + +@interface AnimatedTransitioning : NSObject + +@property (nonatomic) BOOL reverse; + +@end diff --git a/ChangingBackground/AnimatedTransitioning.m b/ChangingBackground/AnimatedTransitioning.m new file mode 100644 index 0000000..40138be --- /dev/null +++ b/ChangingBackground/AnimatedTransitioning.m @@ -0,0 +1,64 @@ +// +// AnimatedTransitioning.m +// ChangingBackground +// +// Created by Christopher Gu on 6/5/14. +// Copyright (c) 2014 Ora Interactive. All rights reserved. +// + +#import "AnimatedTransitioning.h" +#import "AppDelegate.h" + +static NSTimeInterval const AnimatedTransitionDuration = 0.5f; + +@implementation AnimatedTransitioning + + +- (void)animateTransition:(id)transitionContext +{ + AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; + + UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; + UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; + UIView *container = [transitionContext containerView]; + + [container addSubview:toViewController.view]; + + if (self.reverse) { + [UIView animateWithDuration:AnimatedTransitionDuration animations:^{ + toViewController.view.frame = CGRectMake(-320, 0, toViewController.view.frame.size.width, toViewController.view.frame.size.height); + toViewController.view.frame = CGRectMake(0, 0, toViewController.view.frame.size.width, toViewController.view.frame.size.height); + fromViewController.view.frame = CGRectMake(320, 0, fromViewController.view.frame.size.width, fromViewController.view.frame.size.height); + } completion:^(BOOL finished) { + [transitionContext completeTransition:finished]; + + [UIView transitionWithView:appDelegate.window duration:0.5f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ + appDelegate.window.backgroundColor = [UIColor colorWithPatternImage:appDelegate.blueBackground]; + } completion:^(BOOL finished) { + + }]; + }]; + } + else { + [UIView animateWithDuration:AnimatedTransitionDuration animations:^{ + toViewController.view.frame = CGRectMake(320, 0, toViewController.view.frame.size.width, toViewController.view.frame.size.height); + toViewController.view.frame = CGRectMake(0, 0, toViewController.view.frame.size.width, toViewController.view.frame.size.height); + fromViewController.view.frame = CGRectMake(-320, 0, fromViewController.view.frame.size.width, fromViewController.view.frame.size.height); + } completion:^(BOOL finished) { + [transitionContext completeTransition:finished]; + + [UIView transitionWithView:appDelegate.window duration:0.5f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ + appDelegate.window.backgroundColor = [UIColor colorWithPatternImage:appDelegate.greenBackground]; + } completion:^(BOOL finished) { + + }]; + }]; + } +} + +- (NSTimeInterval)transitionDuration:(id)transitionContext +{ + return AnimatedTransitionDuration; +} + +@end \ No newline at end of file diff --git a/ChangingBackground/AppDelegate.h b/ChangingBackground/AppDelegate.h index f96be1d..d6f9223 100644 --- a/ChangingBackground/AppDelegate.h +++ b/ChangingBackground/AppDelegate.h @@ -9,5 +9,8 @@ #import @interface AppDelegate : UIResponder +@property (strong, nonatomic) UIWindow *window; +@property (strong, nonatomic) UIImage *blueBackground; +@property (strong, nonatomic) UIImage *greenBackground; @end diff --git a/ChangingBackground/AppDelegate.m b/ChangingBackground/AppDelegate.m index 9538cc1..05e2e7f 100644 --- a/ChangingBackground/AppDelegate.m +++ b/ChangingBackground/AppDelegate.m @@ -7,27 +7,47 @@ // #import "AppDelegate.h" +#import "TransitioningDelegate.h" #import "FirstViewController.h" @interface AppDelegate () { - UIWindow *window; } +@property (nonatomic, strong) TransitioningDelegate *transitioningDelegate; + @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - window = [UIWindow.alloc initWithFrame:UIScreen.mainScreen.bounds]; - [window makeKeyAndVisible]; + self.window = [UIWindow.alloc initWithFrame:UIScreen.mainScreen.bounds]; + [self.window makeKeyAndVisible]; FirstViewController *firstViewController = FirstViewController.new; - UINavigationController *navigationController = [UINavigationController.alloc initWithRootViewController:firstViewController]; - [navigationController setNavigationBarHidden:YES]; - - window.rootViewController = navigationController; + + self.transitioningDelegate = [TransitioningDelegate new]; + firstViewController.transitioningDelegate = self.transitioningDelegate; + self.window.rootViewController = firstViewController; + + self.blueBackground = [self imageWithImage:[UIImage imageNamed:@"blue"] scaledToSize:CGSizeMake(320, 568)]; + self.greenBackground = [self imageWithImage:[UIImage imageNamed:@"green"] scaledToSize:CGSizeMake(320, 568)]; + + self.window.backgroundColor = [UIColor colorWithPatternImage:self.blueBackground]; return YES; } +// the image sizes are too short for 4-inch +- (UIImage*)imageWithImage:(UIImage*)image + scaledToSize:(CGSize)newSize +{ + UIGraphicsBeginImageContext( newSize ); + [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; + UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return newImage; +} + @end + diff --git a/ChangingBackground/FirstViewController.m b/ChangingBackground/FirstViewController.m index 8aedb68..738a96d 100644 --- a/ChangingBackground/FirstViewController.m +++ b/ChangingBackground/FirstViewController.m @@ -10,14 +10,23 @@ #import "SecondViewController.h" @interface FirstViewController () - +{ + IBOutlet UIButton *goForwardButton; +} @end @implementation FirstViewController +-(void)viewDidLoad +{ + self.view.backgroundColor = [UIColor clearColor]; + goForwardButton.layer.cornerRadius = 5.0; +} + - (IBAction)goForwardButtonPressed { SecondViewController *secondViewController = SecondViewController.new; - [self.navigationController pushViewController:secondViewController animated:YES]; + secondViewController.transitioningDelegate = self.transitioningDelegate; + [self presentViewController:secondViewController animated:YES completion:nil]; } @end diff --git a/ChangingBackground/FirstViewController.xib b/ChangingBackground/FirstViewController.xib index 0dd58c2..72ad0b8 100644 --- a/ChangingBackground/FirstViewController.xib +++ b/ChangingBackground/FirstViewController.xib @@ -1,217 +1,43 @@ - - - - 1552 - 12C3006 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUILabel - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - {{77, 115}, {166, 21}} - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Home View Controller - - 1 - MCAwIDAAA - darkTextColor - - - 0 - - 1 - 17 - - - Helvetica - 17 - 16 - - NO - - - - 292 - {{102, 180}, {109, 44}} - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Go Forward - - 3 - MQA - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - 3 - MC41AA - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - {{0, 20}, {320, 548}} - - - 3 - MQA - - 2 - - - - - IBUIScreenMetrics - - YES - - - - - - {320, 568} - {568, 320} - - - IBCocoaTouchFramework - Retina 4 Full Screen - 2 - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - goForwardButtonPressed - - - 7 - - 8 - - - - - - 0 - - - - - - 1 - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - - - 7 - - - - - - - FirstViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 8 - - - 0 - IBCocoaTouchFramework - YES - 3 - 2083 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChangingBackground/SecondViewController.m b/ChangingBackground/SecondViewController.m index 028f811..1017705 100644 --- a/ChangingBackground/SecondViewController.m +++ b/ChangingBackground/SecondViewController.m @@ -8,11 +8,19 @@ #import "SecondViewController.h" +@implementation SecondViewController +{ + IBOutlet UIButton *goBackButton; +} -@implementation SecondViewController +-(void)viewDidLoad +{ + self.view.backgroundColor = [UIColor clearColor]; + goBackButton.layer.cornerRadius = 5.0; +} - (IBAction)goBackButtonPressed { - [self.navigationController popViewControllerAnimated:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; } @end diff --git a/ChangingBackground/SecondViewController.xib b/ChangingBackground/SecondViewController.xib index d603949..259141f 100644 --- a/ChangingBackground/SecondViewController.xib +++ b/ChangingBackground/SecondViewController.xib @@ -1,243 +1,43 @@ - - - - 1552 - 12C3006 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUILabel - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - {{71, 118}, {209, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Second View Controller - - 1 - MCAwIDAAA - darkTextColor - - - 0 - - 1 - 17 - - - Helvetica - 17 - 16 - - NO - - - - 292 - {{118, 178}, {85, 44}} - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Go Back - - 3 - MQA - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - 3 - MC41AA - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - {{0, 20}, {320, 548}} - - - - - 3 - MQA - - 2 - - - - - IBUIScreenMetrics - - YES - - - - - - {320, 568} - {568, 320} - - - IBCocoaTouchFramework - Retina 4 Full Screen - 2 - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - goBackButtonPressed - - - 7 - - 10 - - - - - - 0 - - - - - - 1 - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - - - 7 - - - - - - - SecondViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 10 - - - - - SecondViewController - UIViewController - - goBackButtonPressed - id - - - goBackButtonPressed - - goBackButtonPressed - id - - - - IBProjectSource - ./Classes/SecondViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 2083 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChangingBackground/TransitioningDelegate.h b/ChangingBackground/TransitioningDelegate.h new file mode 100644 index 0000000..7c46f84 --- /dev/null +++ b/ChangingBackground/TransitioningDelegate.h @@ -0,0 +1,13 @@ +// +// TransitioningDelegate.h +// ChangingBackground +// +// Created by Christopher Gu on 6/5/14. +// Copyright (c) 2014 Ora Interactive. All rights reserved. +// + +#import + +@interface TransitioningDelegate : NSObject + +@end diff --git a/ChangingBackground/TransitioningDelegate.m b/ChangingBackground/TransitioningDelegate.m new file mode 100644 index 0000000..06da258 --- /dev/null +++ b/ChangingBackground/TransitioningDelegate.m @@ -0,0 +1,28 @@ +// +// TransitioningDelegate.m +// ChangingBackground +// +// Created by Christopher Gu on 6/5/14. +// Copyright (c) 2014 Ora Interactive. All rights reserved. +// + +#import "TransitioningDelegate.h" +#import "AnimatedTransitioning.h" + + +@implementation TransitioningDelegate + +- (id )animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source +{ + AnimatedTransitioning *transitioning = [AnimatedTransitioning new]; + return transitioning; +} + +- (id )animationControllerForDismissedController:(UIViewController *)dismissed +{ + AnimatedTransitioning *transitioning = [AnimatedTransitioning new]; + transitioning.reverse = YES; + return transitioning; +} + +@end