Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions Classes/MGSplitCornersView.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#import <UIKit/UIKit.h>

int floatsAreEqual(float a, float b);

typedef enum _MGCornersPosition {
MGCornersPositionLeadingVertical = 0, // top of screen for a left/right split.
MGCornersPositionTrailingVertical = 1, // bottom of screen for a left/right split.
Expand All @@ -17,10 +19,10 @@ typedef enum _MGCornersPosition {

@class MGSplitViewController;
@interface MGSplitCornersView : UIView {
float cornerRadius;
MGSplitViewController *splitViewController;
MGCornersPosition cornersPosition;
UIColor *cornerBackgroundColor;
float cornerRadius_;
MGSplitViewController *splitViewController_;
MGCornersPosition cornersPosition_;
UIColor *cornerBackgroundColor_;
}

@property (nonatomic, assign) float cornerRadius;
Expand Down
28 changes: 19 additions & 9 deletions Classes/MGSplitCornersView.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,29 +33,39 @@ - (id)initWithFrame:(CGRect)frame

- (void)dealloc
{
self.cornerBackgroundColor = nil;

[super dealloc];
cornerBackgroundColor_ = nil;
}


#pragma mark -
#pragma mark Geometry helpers


double deg2Rad(double degrees);
double deg2Rad(double degrees)
{
// Converts degrees to radians.
return degrees * (M_PI / 180.0);
}


double rad2Deg(double radians);
double rad2Deg(double radians)
{
// Converts radians to degrees.
return radians * (180 / M_PI);
}

int floatsAreEqual(float a, float b)
{
int r = 1;
if (a - b > 0
|| a - b < 0)
{
r = 0;
}
return r;
}


#pragma mark -
#pragma mark Drawing
Expand Down Expand Up @@ -197,8 +207,9 @@ - (void)drawRect:(CGRect)rect

- (void)setCornerRadius:(float)newRadius
{
if (newRadius != cornerRadius) {
cornerRadius = newRadius;
if (!floatsAreEqual(newRadius, cornerRadius_))
{
cornerRadius_ = newRadius;
[self setNeedsDisplay];
}
}
Expand All @@ -224,9 +235,8 @@ - (void)setCornersPosition:(MGCornersPosition)posn

- (void)setCornerBackgroundColor:(UIColor *)color
{
if (color != cornerBackgroundColor) {
[cornerBackgroundColor release];
cornerBackgroundColor = [color retain];
if (color != cornerBackgroundColor_) {
cornerBackgroundColor_ = color;
[self setNeedsDisplay];
}
}
Expand Down
4 changes: 2 additions & 2 deletions Classes/MGSplitDividerView.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

@class MGSplitViewController;
@interface MGSplitDividerView : UIView {
MGSplitViewController *splitViewController;
BOOL allowsDragging;
MGSplitViewController *splitViewController_;
BOOL allowsDragging_;
}

@property (nonatomic, assign) MGSplitViewController *splitViewController; // weak ref.
Expand Down
3 changes: 1 addition & 2 deletions Classes/MGSplitDividerView.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ - (id)initWithFrame:(CGRect)frame

- (void)dealloc
{
self.splitViewController = nil;
[super dealloc];
splitViewController_ = nil;
}


Expand Down
38 changes: 12 additions & 26 deletions Classes/MGSplitViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#define MG_ANIMATION_CHANGE_SUBVIEWS_ORDER @"ChangeSubviewsOrder" // Animation ID for internal use.


@interface MGSplitViewController (MGPrivateMethods)
@interface MGSplitViewController ()

- (void)setup;
- (CGSize)splitViewSizeForOrientation:(UIInterfaceOrientation)theOrientation;
Expand Down Expand Up @@ -149,13 +149,6 @@ - (void)dealloc
{
_delegate = nil;
[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[_viewControllers release];
[_barButtonItem release];
[_hiddenPopoverController release];
[_dividerView release];
[_cornerViews release];

[super dealloc];
}


Expand Down Expand Up @@ -437,9 +430,7 @@ - (void)layoutSubviewsForInterfaceOrientation:(UIInterfaceOrientation)theOrienta
trailingCorners.cornerBackgroundColor = MG_DEFAULT_CORNER_COLOR;
trailingCorners.cornerRadius = MG_DEFAULT_CORNER_RADIUS;
_cornerViews = [[NSArray alloc] initWithObjects:leadingCorners, trailingCorners, nil];
[leadingCorners release];
[trailingCorners release];


} else if ([_cornerViews count] == 2) {
leadingCorners = [_cornerViews objectAtIndex:0];
trailingCorners = [_cornerViews objectAtIndex:1];
Expand Down Expand Up @@ -559,7 +550,6 @@ - (void)reconfigureForMasterInPopover:(BOOL)inPopover

if (inPopover && !_hiddenPopoverController && !_barButtonItem) {
// Create and configure popover for our masterViewController.
[_hiddenPopoverController release];
_hiddenPopoverController = nil;
[self.masterViewController viewWillDisappear:NO];
_hiddenPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.masterViewController];
Expand All @@ -585,7 +575,6 @@ - (void)reconfigureForMasterInPopover:(BOOL)inPopover

// Remove master from popover and destroy popover, if it exists.
[_hiddenPopoverController dismissPopoverAnimated:NO];
[_hiddenPopoverController release];
_hiddenPopoverController = nil;

// Inform delegate that the _barButtonItem will become invalid.
Expand All @@ -596,7 +585,6 @@ - (void)reconfigureForMasterInPopover:(BOOL)inPopover
}

// Destroy _barButtonItem.
[_barButtonItem release];
_barButtonItem = nil;

// Move master view.
Expand Down Expand Up @@ -857,7 +845,7 @@ - (void)setSplitPosition:(float)posn
// Apply default constraints if delegate doesn't wish to participate.
float minPos = MG_MIN_VIEW_WIDTH;
float maxPos = ((_vertical) ? fullSize.width : fullSize.height) - (MG_MIN_VIEW_WIDTH + _splitWidth);
constrained = (newPosn != _splitPosition && newPosn >= minPos && newPosn <= maxPos);
constrained = (!floatsAreEqual(newPosn, _splitPosition) && newPosn >= minPos && newPosn <= maxPos);
}

if (constrained) {
Expand Down Expand Up @@ -900,7 +888,7 @@ - (float)splitWidth

- (void)setSplitWidth:(float)width
{
if (width != _splitWidth && width >= 0) {
if (!floatsAreEqual(width, _splitWidth) && width >= 0) {
_splitWidth = width;
if ([self isShowingMaster]) {
[self layoutSubviews];
Expand All @@ -911,7 +899,7 @@ - (void)setSplitWidth:(float)width

- (NSArray *)viewControllers
{
return [[_viewControllers copy] autorelease];
return [_viewControllers copy];
}


Expand All @@ -923,7 +911,6 @@ - (void)setViewControllers:(NSArray *)controllers
[controller.view removeFromSuperview];
}
}
[_viewControllers release];
_viewControllers = [[NSMutableArray alloc] initWithCapacity:2];
if (controllers && [controllers count] >= 2) {
self.masterViewController = [controllers objectAtIndex:0];
Expand All @@ -942,7 +929,7 @@ - (UIViewController *)masterViewController
if (_viewControllers && [_viewControllers count] > 0) {
NSObject *controller = [_viewControllers objectAtIndex:0];
if ([controller isKindOfClass:[UIViewController class]]) {
return [[controller retain] autorelease];
return (UIViewController *)controller;
}
}

Expand Down Expand Up @@ -984,7 +971,7 @@ - (UIViewController *)detailViewController
if (_viewControllers && [_viewControllers count] > 1) {
NSObject *controller = [_viewControllers objectAtIndex:1];
if ([controller isKindOfClass:[UIViewController class]]) {
return [[controller retain] autorelease];
return (UIViewController *)controller;
}
}

Expand All @@ -1004,6 +991,7 @@ - (void)setDetailViewController:(UIViewController *)detail
if ([_viewControllers objectAtIndex:1] == detail) {
changed = NO;
} else {
[[self detailViewController].view removeFromSuperview];
[_viewControllers replaceObjectAtIndex:1 withObject:detail];
}

Expand All @@ -1019,16 +1007,15 @@ - (void)setDetailViewController:(UIViewController *)detail

- (MGSplitDividerView *)dividerView
{
return [[_dividerView retain] autorelease];
return _dividerView;
}


- (void)setDividerView:(MGSplitDividerView *)divider
{
if (divider != _dividerView) {
[_dividerView removeFromSuperview];
[_dividerView release];
_dividerView = [divider retain];
_dividerView = divider;
_dividerView.splitViewController = self;
_dividerView.backgroundColor = MG_DEFAULT_CORNER_COLOR;
if ([self isShowingMaster]) {
Expand Down Expand Up @@ -1073,9 +1060,8 @@ - (void)setDividerStyle:(MGSplitViewDividerStyle)newStyle
_dividerStyle = newStyle;

// Reconfigure general appearance and behaviour.
float cornerRadius;
float cornerRadius = MG_DEFAULT_CORNER_RADIUS;
if (_dividerStyle == MGSplitViewDividerStyleThin) {
cornerRadius = MG_DEFAULT_CORNER_RADIUS;
_splitWidth = MG_DEFAULT_SPLIT_WIDTH;
self.allowsDraggingDivider = NO;

Expand Down Expand Up @@ -1114,7 +1100,7 @@ - (void)setDividerStyle:(MGSplitViewDividerStyle)newStyle animated:(BOOL)animate
- (NSArray *)cornerViews
{
if (_cornerViews) {
return [[_cornerViews retain] autorelease];
return _cornerViews;
}

return nil;
Expand Down