author | sheepluva |
Tue, 22 Jun 2021 22:13:55 +0200 | |
changeset 15802 | d5c37e78ab83 |
parent 11217 | e68b3e392091 |
permissions | -rwxr-xr-x |
// // MGSplitDividerView.m // MGSplitView // // Created by Matt Gemmell on 26/07/2010. // Copyright 2010 Instinctive Code. // #import "MGSplitDividerView.h" #import "MGSplitViewController.h" @implementation MGSplitDividerView #pragma mark - #pragma mark Setup and teardown - (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { self.userInteractionEnabled = NO; self.allowsDragging = NO; self.contentMode = UIViewContentModeRedraw; } return self; } - (void)dealloc { self.splitViewController = nil; } #pragma mark - #pragma mark Drawing - (void)drawRect:(CGRect)rect { if (splitViewController.dividerStyle == MGSplitViewDividerStyleThin) { [super drawRect:rect]; } else if (splitViewController.dividerStyle == MGSplitViewDividerStylePaneSplitter) { // Draw gradient background. CGRect bounds = self.bounds; CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); CGFloat locations[2] = {0, 1}; CGFloat components[8] = { 0.988f, 0.988f, 0.988f, 1.0, // light 0.875, 0.875, 0.875, 1.0 };// dark CGGradientRef gradient = CGGradientCreateWithColorComponents (rgb, components, locations, 2); CGContextRef context = UIGraphicsGetCurrentContext(); CGPoint start, end; if (splitViewController.vertical) { // Light left to dark right. start = CGPointMake(CGRectGetMinX(bounds), CGRectGetMidY(bounds)); end = CGPointMake(CGRectGetMaxX(bounds), CGRectGetMidY(bounds)); } else { // Light top to dark bottom. start = CGPointMake(CGRectGetMidX(bounds), CGRectGetMinY(bounds)); end = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds)); } CGContextDrawLinearGradient(context, gradient, start, end, 0); CGColorSpaceRelease(rgb); CGGradientRelease(gradient); // Draw borders. float borderThickness = 1.0; [[UIColor colorWithWhite:0.7f alpha:1.0] set]; CGRect borderRect = bounds; if (splitViewController.vertical) { borderRect.size.width = borderThickness; UIRectFill(borderRect); borderRect.origin.x = CGRectGetMaxX(bounds) - borderThickness; UIRectFill(borderRect); } else { borderRect.size.height = borderThickness; UIRectFill(borderRect); borderRect.origin.y = CGRectGetMaxY(bounds) - borderThickness; UIRectFill(borderRect); } // Draw grip. [self drawGripThumbInRect:bounds]; } } - (void)drawGripThumbInRect:(CGRect)rect { float width = 9.0; float height; if (splitViewController.vertical) { height = 30.0; } else { height = width; width = 30.0; } // Draw grip in centred in rect. CGRect gripRect = CGRectMake(0, 0, width, height); gripRect.origin.x = ((rect.size.width - gripRect.size.width) / 2.f); gripRect.origin.y = ((rect.size.height - gripRect.size.height) / 2.f); float stripThickness = 1.0; UIColor *stripColor = [UIColor colorWithWhite:0.35f alpha:1.0]; UIColor *lightColor = [UIColor colorWithWhite:1.0 alpha:1.0]; float space = 3.0; if (splitViewController.vertical) { gripRect.size.width = stripThickness; [stripColor set]; UIRectFill(gripRect); gripRect.origin.x += stripThickness; gripRect.origin.y += 1; [lightColor set]; UIRectFill(gripRect); gripRect.origin.x -= stripThickness; gripRect.origin.y -= 1; gripRect.origin.x += space + stripThickness; [stripColor set]; UIRectFill(gripRect); gripRect.origin.x += stripThickness; gripRect.origin.y += 1; [lightColor set]; UIRectFill(gripRect); gripRect.origin.x -= stripThickness; gripRect.origin.y -= 1; gripRect.origin.x += space + stripThickness; [stripColor set]; UIRectFill(gripRect); gripRect.origin.x += stripThickness; gripRect.origin.y += 1; [lightColor set]; UIRectFill(gripRect); } else { gripRect.size.height = stripThickness; [stripColor set]; UIRectFill(gripRect); gripRect.origin.y += stripThickness; gripRect.origin.x -= 1; [lightColor set]; UIRectFill(gripRect); gripRect.origin.y -= stripThickness; gripRect.origin.x += 1; gripRect.origin.y += space + stripThickness; [stripColor set]; UIRectFill(gripRect); gripRect.origin.y += stripThickness; gripRect.origin.x -= 1; [lightColor set]; UIRectFill(gripRect); gripRect.origin.y -= stripThickness; gripRect.origin.x += 1; gripRect.origin.y += space + stripThickness; [stripColor set]; UIRectFill(gripRect); gripRect.origin.y += stripThickness; gripRect.origin.x -= 1; [lightColor set]; UIRectFill(gripRect); } } #pragma mark - #pragma mark Interaction - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; if (touch) { CGPoint lastPt = [touch previousLocationInView:self]; CGPoint pt = [touch locationInView:self]; float offset = (splitViewController.vertical) ? pt.x - lastPt.x : pt.y - lastPt.y; if (!splitViewController.masterBeforeDetail) { offset = -offset; } splitViewController.splitPosition = splitViewController.splitPosition + offset; } } #pragma mark - #pragma mark Accessors and properties - (void)setAllowsDragging:(BOOL)flag { if (flag != allowsDragging) { allowsDragging = flag; self.userInteractionEnabled = allowsDragging; } } @synthesize splitViewController; @synthesize allowsDragging; @end