From dfacc6098fe1aa660bc202c6f1fae234ae63ce99 Mon Sep 17 00:00:00 2001 From: Mark Pospesel Date: Wed, 16 May 2012 05:59:09 -0400 Subject: [PATCH] Add new flip style: Inward --- .../MPFoldTransition/MPFlipEnumerations.h | 9 ++- .../MPFoldTransition/MPFlipTransition.m | 3 + .../en.lproj/MainStoryboard_iPad.storyboard | 71 +++++++++++++++++++ .../en.lproj/MainStoryboard_iPhone.storyboard | 40 +++++++++++ 4 files changed, 121 insertions(+), 2 deletions(-) diff --git a/MPFoldTransition/MPFoldTransition/MPFlipEnumerations.h b/MPFoldTransition/MPFoldTransition/MPFlipEnumerations.h index 4d7868d..fba1722 100644 --- a/MPFoldTransition/MPFoldTransition/MPFlipEnumerations.h +++ b/MPFoldTransition/MPFoldTransition/MPFlipEnumerations.h @@ -17,20 +17,25 @@ // Horizontal = page flips right to left about a vertical spine // Vertical = page flips bottom to top about a horizontal spine +// Bit 2: Perspective - Outward (unset) vs. Inward (set) +// Outward = page flips towards viewer +// Inward = page flips away from viewer + // TODO: spine position (left, mid, right // top, mid, bottom) enum { // current view folds away into center, next view slides in flat from top & bottom MPFlipStyleDefault = 0, MPFlipStyleDirectionBackward = 1 << 0, - MPFlipStyleVertical = 1 << 1 + MPFlipStyleVertical = 1 << 1, + MPFlipStyleInward = 1 << 2 }; typedef NSUInteger MPFlipStyle; #define MPFlipStyleDirectionMask MPFlipStyleDirectionBackward #define MPFlipStyleOrientationMask MPFlipStyleVertical +#define MPFlipStylePerspectiveMask MPFlipStyleInward static inline MPFlipStyle MPFlipStyleFlipDirectionBit(MPFlipStyle style) { return (style & ~MPFlipStyleDirectionMask) | ((style & MPFlipStyleDirectionMask) == MPFlipStyleDirectionBackward? 0 : MPFlipStyleDirectionBackward); } - #endif diff --git a/MPFoldTransition/MPFoldTransition/MPFlipTransition.m b/MPFoldTransition/MPFoldTransition/MPFlipTransition.m index b8d2a63..cf11d52 100644 --- a/MPFoldTransition/MPFoldTransition/MPFlipTransition.m +++ b/MPFoldTransition/MPFoldTransition/MPFlipTransition.m @@ -82,6 +82,7 @@ - (void)perform:(void (^)(BOOL finished))completion { BOOL forwards = ([self style] & MPFlipStyleDirectionMask) != MPFlipStyleDirectionBackward; BOOL vertical = ([self style] & MPFlipStyleOrientationMask) == MPFlipStyleVertical; + BOOL inward = ([self style] & MPFlipStylePerspectiveMask) == MPFlipStyleInward; CGRect bounds = self.rect; CGFloat scale = [[UIScreen mainScreen] scale]; @@ -249,6 +250,8 @@ - (void)perform:(void (^)(BOOL finished))completion transform.m34 = -1.0/(height * 4.6666667); else transform.m34 = [self m34]; + if (inward) + transform.m34 = -transform.m34; // flip perspective around mainView.layer.sublayerTransform = transform; NSString *rotationKey = vertical? @"transform.rotation.x" : @"transform.rotation.y"; diff --git a/MPFoldTransition/en.lproj/MainStoryboard_iPad.storyboard b/MPFoldTransition/en.lproj/MainStoryboard_iPad.storyboard index c3da622..ba0f52e 100644 --- a/MPFoldTransition/en.lproj/MainStoryboard_iPad.storyboard +++ b/MPFoldTransition/en.lproj/MainStoryboard_iPad.storyboard @@ -254,6 +254,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -499,6 +539,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MPFoldTransition/en.lproj/MainStoryboard_iPhone.storyboard b/MPFoldTransition/en.lproj/MainStoryboard_iPhone.storyboard index b3107fb..e930a19 100644 --- a/MPFoldTransition/en.lproj/MainStoryboard_iPhone.storyboard +++ b/MPFoldTransition/en.lproj/MainStoryboard_iPhone.storyboard @@ -346,6 +346,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +