Compare commits

...

28 Commits

Author SHA1 Message Date
terryworona b928cd1849 Fixed #159 for real this time 2015-11-20 18:13:19 -08:00
terryworona 2d6c6e291d More cleanup 2015-11-20 17:57:22 -08:00
terryworona 5addeeae83 Spacing 2015-11-20 16:58:30 -08:00
terryworona ec14cc002e Reverted #153 (won't enhance) 2015-11-20 16:47:32 -08:00
terryworona e3174efa9e Fixed #159 2015-11-20 16:08:56 -08:00
terryworona 4a1380668e Enhancement #153 2015-11-20 15:10:52 -08:00
terryworona 3752b7d598 Hide vertical selection when touches begin. 2015-11-19 09:51:26 -08:00
terryworona e1d10ffb7e Updated readme for 185 2015-11-18 17:28:07 -08:00
terryworona f2e5641d58 Fixed #185 2015-11-18 17:23:04 -08:00
terryworona b0c68377a3 Fixed #146 2015-11-18 15:32:01 -08:00
terryworona d3cb39b566 Updated project for iOS 9 support 2015-11-18 14:35:32 -08:00
terryworona 99f727c0d6 updated changelog and pod spec 2015-09-18 11:44:35 -07:00
terryworona b6bc9c29ca readme and comment 2015-09-18 11:41:05 -07:00
terryworona 124eabe98c Merge pull request #188 from andrewloyola/line-chart-touch-ignore
Delegate call to ignore touches on selected lines
2015-09-18 11:30:20 -07:00
Andrew Loyola 1f0f3351c3 Delegate call do ignore touches on selected lines
If you want to display more lines than are touchable, you can use this to ignore certain line indices
2015-09-18 11:20:50 -04:00
Terry Worona 5f8863ede1 updated changeling 2015-08-12 09:07:14 -07:00
Terry Worona bf8d5de61e updated pod spec 2015-08-12 08:49:11 -07:00
Terry Worona 23935a3b55 small cleanup 2015-08-12 08:47:26 -07:00
terryworona f7d15d4905 Merge pull request #183 from 0xPr0xy/master
Return the available height instead of 0
2015-08-12 08:43:08 -07:00
Peter IJlst 372b69ff4a Merge branch 'release/fix-invisible-bars' 2015-08-12 09:16:22 +02:00
Peter IJlst b17a37c1d7 in normalizedHeightForRawHeight () method return availableHeight instead of 0.
Fixes: http://stackoverflow.com/questions/24123794/color-of-bar-chart-not-displaying-in-jbchartview
2015-08-12 09:12:33 +02:00
terryworona a1f34f78fb updated changelog and pod spec 2015-04-30 15:20:27 -07:00
terryworona 15e73af3b3 Merge pull request #165 from eventualbuddha/nil-delegate-and-datasource-on-dealloc
Nil out delegate and datasource on dealloc
2015-04-30 15:13:33 -07:00
Brian Donovan aac41605aa Add dealloc methods to the demos.
This is proper Cocoa etiquette and may help others prevent crashes in
their own apps.
2015-04-30 11:48:47 -07:00
Brian Donovan 0bfc904f58 Ensure our own subviews with a delegate are cleaned up.
This can potentially cause a crash if the `linesView` or `dotsView`
were to send a message to its delegate after the delegate was dealloc’d.
2015-04-30 11:45:25 -07:00
terryworona b54f27e67d Updated changelog and podspec 2015-04-16 11:54:01 -07:00
terryworona ff17a56eff Fixes #157 2015-04-16 11:52:27 -07:00
terryworona 93d98d7b87 updated changeling and pod spec 2015-04-13 12:48:49 -07:00
15 changed files with 287 additions and 44 deletions
+106 -2
View File
@@ -1,5 +1,109 @@
# Change Log
## [v2.8.16](https://github.com/Jawbone/JBChartView/tree/v2.8.16) (2015-09-18)
[Full Changelog](https://github.com/Jawbone/JBChartView/compare/v2.8.15...v2.8.16)
**Closed issues:**
- Partially filled bar [\#186](https://github.com/Jawbone/JBChartView/issues/186)
**Merged pull requests:**
- Delegate call to ignore touches on selected lines [\#188](https://github.com/Jawbone/JBChartView/pull/188) ([andrewloyola](https://github.com/andrewloyola))
- Adds support for gradients to line charts [\#175](https://github.com/Jawbone/JBChartView/pull/175) ([benjaminsnorris](https://github.com/benjaminsnorris))
## [v2.8.15](https://github.com/Jawbone/JBChartView/tree/v2.8.15) (2015-08-12)
[Full Changelog](https://github.com/Jawbone/JBChartView/compare/v2.8.14...v2.8.15)
**Implemented enhancements:**
- Suggestion for the README.md [\#176](https://github.com/Jawbone/JBChartView/issues/176)
**Fixed bugs:**
- Line color overlap issue [\#168](https://github.com/Jawbone/JBChartView/issues/168)
**Closed issues:**
- JBLineChart reloadData problem [\#181](https://github.com/Jawbone/JBChartView/issues/181)
- JBLineChartView: wrong width on iPhone6/6+ [\#177](https://github.com/Jawbone/JBChartView/issues/177)
- Is there anyway to plot two vertical values for one horizontal index in the bar chart? [\#172](https://github.com/Jawbone/JBChartView/issues/172)
- Charts not rendering properly [\#171](https://github.com/Jawbone/JBChartView/issues/171)
- How can you set the bar chart to fill the width of a UIView? [\#170](https://github.com/Jawbone/JBChartView/issues/170)
- Adding X and Y Values [\#169](https://github.com/Jawbone/JBChartView/issues/169)
- Undefined symbols for architecture i386 [\#167](https://github.com/Jawbone/JBChartView/issues/167)
- Not All Data Points Visible in Flexible View [\#166](https://github.com/Jawbone/JBChartView/issues/166)
**Merged pull requests:**
- Return the available height instead of 0 [\#183](https://github.com/Jawbone/JBChartView/pull/183) ([0xPr0xy](https://github.com/0xPr0xy))
- Fix for invisible bar color [\#182](https://github.com/Jawbone/JBChartView/pull/182) ([0xPr0xy](https://github.com/0xPr0xy))
- + reloadEndedInBarChartView: delegate added [\#174](https://github.com/Jawbone/JBChartView/pull/174) ([bw0lff](https://github.com/bw0lff))
## [v2.8.14](https://github.com/Jawbone/JBChartView/tree/v2.8.14) (2015-04-30)
[Full Changelog](https://github.com/Jawbone/JBChartView/compare/v2.8.13...v2.8.14)
**Closed issues:**
- Will JBChartView integrated with React Native? [\#164](https://github.com/Jawbone/JBChartView/issues/164)
- white dot+dotted lines sometimes does not appear when touched. [\#161](https://github.com/Jawbone/JBChartView/issues/161)
- Small offset when using a footer for a x-axis [\#160](https://github.com/Jawbone/JBChartView/issues/160)
- gradient for bar chart is lost / sizing problem [\#158](https://github.com/Jawbone/JBChartView/issues/158)
**Merged pull requests:**
- Nil out delegate and datasource on dealloc [\#165](https://github.com/Jawbone/JBChartView/pull/165) ([eventualbuddha](https://github.com/eventualbuddha))
## [v2.8.13](https://github.com/Jawbone/JBChartView/tree/v2.8.13) (2015-04-16)
[Full Changelog](https://github.com/Jawbone/JBChartView/compare/v2.8.12...v2.8.13)
**Fixed bugs:**
- Wrong calculation of the lineIndex [\#157](https://github.com/Jawbone/JBChartView/issues/157)
**Closed issues:**
- Swift round up for respondsToSelector\(\) and sizeWithFont\(\) [\#156](https://github.com/Jawbone/JBChartView/issues/156)
## [v2.8.12](https://github.com/Jawbone/JBChartView/tree/v2.8.12) (2015-04-13)
[Full Changelog](https://github.com/Jawbone/JBChartView/compare/v2.8.11...v2.8.12)
**Fixed bugs:**
- Footer and Header view Swift implementation [\#152](https://github.com/Jawbone/JBChartView/issues/152)
**Closed issues:**
- Problems with selection when JBLineChartView is within UITableView [\#155](https://github.com/Jawbone/JBChartView/issues/155)
- Show chart selection permanently [\#151](https://github.com/Jawbone/JBChartView/issues/151)
- Crash when returning NAN [\#150](https://github.com/Jawbone/JBChartView/issues/150)
**Merged pull requests:**
- Fix warnings when building w/ Xcode 6.3 [\#154](https://github.com/Jawbone/JBChartView/pull/154) ([amro](https://github.com/amro))
- Add ability for the graphs to always show the selected data value and to pre-set which index is selected [\#147](https://github.com/Jawbone/JBChartView/pull/147) ([MobileVet](https://github.com/MobileVet))
## [v2.8.11](https://github.com/Jawbone/JBChartView/tree/v2.8.11) (2015-03-31)
[Full Changelog](https://github.com/Jawbone/JBChartView/compare/v2.8.10...v2.8.11)
@@ -430,7 +534,7 @@
- Added delegate method to configure the width of the vertical selection bar in a line chart. [\#37](https://github.com/Jawbone/JBChartView/pull/37) ([ghost](https://github.com/ghost))
- Add variable dot colors [\#34](https://github.com/Jawbone/JBChartView/pull/34) ([alexdunn](https://github.com/alexdunn))
- Add variable dot colors [\#34](https://github.com/Jawbone/JBChartView/pull/34) ([xanderdunn](https://github.com/xanderdunn))
## [v2.1.6](https://github.com/Jawbone/JBChartView/tree/v2.1.6) (2014-04-11)
@@ -444,7 +548,7 @@
**Merged pull requests:**
- Add variable dot colors [\#32](https://github.com/Jawbone/JBChartView/pull/32) ([alexdunn](https://github.com/alexdunn))
- Add variable dot colors [\#32](https://github.com/Jawbone/JBChartView/pull/32) ([xanderdunn](https://github.com/xanderdunn))
## [v2.1.5](https://github.com/Jawbone/JBChartView/tree/v2.1.5) (2014-04-10)
+5 -4
View File
@@ -41,7 +41,7 @@ static UIColor *kJBBarChartViewDefaultBarColor = nil;
// View quick accessors
- (CGFloat)availableHeight;
- (CGFloat)normalizedHeightForRawHeight:(NSNumber*)rawHeight;
- (CGFloat)normalizedHeightForRawHeight:(NSNumber *)rawHeight;
- (CGFloat)barWidth;
// Touch helpers
@@ -299,7 +299,7 @@ static UIColor *kJBBarChartViewDefaultBarColor = nil;
return self.bounds.size.height - self.headerView.frame.size.height - self.footerView.frame.size.height - self.headerPadding - self.footerPadding;
}
- (CGFloat)normalizedHeightForRawHeight:(NSNumber*)rawHeight
- (CGFloat)normalizedHeightForRawHeight:(NSNumber *)rawHeight
{
CGFloat minHeight = [self minimumValue];
CGFloat maxHeight = [self maximumValue];
@@ -307,7 +307,7 @@ static UIColor *kJBBarChartViewDefaultBarColor = nil;
if ((maxHeight - minHeight) <= 0)
{
return 0;
return [self availableHeight];
}
return ((value - minHeight) / (maxHeight - minHeight)) * [self availableHeight];
@@ -561,7 +561,7 @@ static UIColor *kJBBarChartViewDefaultBarColor = nil;
{
return;
}
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
UIView *barView = [self barViewForForPoint:touchPoint];
@@ -624,6 +624,7 @@ static UIColor *kJBBarChartViewDefaultBarColor = nil;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self setVerticalSelectionViewVisible:NO animated:NO];
[self touchesBeganOrMovedWithTouches:touches];
}
+25 -2
View File
@@ -75,6 +75,19 @@ typedef NS_ENUM(NSInteger, JBLineChartViewLineStyle){
*/
- (BOOL)lineChartView:(JBLineChartView *)lineChartView smoothLineAtLineIndex:(NSUInteger)lineIndex;
/**
* Returns the opacity value to be used for dimming the line & fill during selection events.
* This value is applied to the line or fill's opacity anytime it's not selected (but another line is).
*
* Default: 0.2.
*
* @param lineChartView The line chart object requesting this information.
* @param lineIndex An index number identifying a line in the chart.
*
* @return A value between 0.0 and 1.0 (will be clamped accordingly).
*/
- (CGFloat)lineChartView:(JBLineChartView *)lineChartView dimmedSelectionOpacityAtLineIndex:(NSUInteger)lineIndex;
/**
* Returns a (custom) UIView instance representing a dot (x,y point) within the chart.
* For this value to apply, showsDotsForLineAtLineIndex: must return YES for the line at lineIndex.
@@ -132,8 +145,8 @@ typedef NS_ENUM(NSInteger, JBLineChartViewLineStyle){
* Occurs whenever there is a touch gesture on the chart (chart must be expanded).
* The horizontal index is the closest index to the touch point & is clamped to it's max/min value if it moves outside of the view's bounds.
* The lineIndex remains constant until the line is deselected and will be highlighted using the (optional) selectionColorForLineAtLineIndex: protocol.
* Futhermore, all other lines that aren't selected will be dimmed to 20%% opacity throughout the duration of the touch/move. Any dotted line that isn't the
* primary selection will have it's dots dimmed to hidden (to avoid transparency issues).
* Futhermore, all other lines that aren't selected will be dimmed to 20% opacity (default) throughout the duration of the touch/move.
* Any dotted line that isn't the primary selection will have it's dots dimmed to hidden (to avoid transparency issues).
*
* @param lineChartView A line chart object informing the delegate about the new selection.
* @param lineIndex An index number identifying the closest line in the chart to the current touch
@@ -150,6 +163,16 @@ typedef NS_ENUM(NSInteger, JBLineChartViewLineStyle){
*/
- (void)didDeselectLineInLineChartView:(JBLineChartView *)lineChartView;
/**
* Returns whether or not a line at a particular index responds to selection events.
*
* Default: YES
*
* @param lineChartView A line chart object informing the delegate about the new selection.
* @param lineIndex An index number identifying the closest line in the chart to the current touch
*/
- (BOOL)lineChartView:(JBLineChartView *)lineChartView shouldIgnoreSelectionAtIndex:(NSUInteger)lineIndex;
/**
* Returns the color of particular line at lineIndex within the chart.
*
+42 -9
View File
@@ -113,6 +113,7 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
- (CGFloat)paddingForLineChartLinesView:(JBLineChartLinesView *)lineChartLinesView;
- (JBLineChartViewLineStyle)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView lineStyleForLineAtLineIndex:(NSUInteger)lineIndex;
- (BOOL)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView smoothLineAtLineIndex:(NSUInteger)lineIndex;
- (CGFloat)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView dimmedSelectionOpacityAtLineIndex:(NSUInteger)lineIndex;
@end
@@ -312,6 +313,7 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
// Remove old line view
if (self.linesView)
{
self.linesView.delegate = nil;
[self.linesView removeFromSuperview];
self.linesView = nil;
}
@@ -339,6 +341,7 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
// Remove old dot view
if (self.dotsView)
{
self.dotsView.delegate = nil;
[self.dotsView removeFromSuperview];
self.dotsView = nil;
}
@@ -433,7 +436,7 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
if ((maxHeight - minHeight) <= 0)
{
return 0;
return [self availableHeight];
}
return ((rawHeight - minHeight) / (maxHeight - minHeight)) * [self availableHeight];
@@ -636,6 +639,15 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
return NO;
}
- (CGFloat)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView dimmedSelectionOpacityAtLineIndex:(NSUInteger)lineIndex
{
if ([self.dataSource respondsToSelector:@selector(lineChartView:dimmedSelectionOpacityAtLineIndex:)])
{
return [self.dataSource lineChartView:self dimmedSelectionOpacityAtLineIndex:lineIndex];
}
return kJBLineChartLinesViewDefaultDimmedOpacity;
}
#pragma mark - JBLineChartDotsViewDelegate
- (NSArray *)chartDataForLineChartDotsView:(JBLineChartDotsView*)lineChartDotsView
@@ -950,6 +962,15 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
for (NSUInteger lineIndex=0; lineIndex<numberOfLines; lineIndex++)
{
NSAssert([self.dataSource respondsToSelector:@selector(lineChartView:numberOfVerticalValuesAtLineIndex:)], @"JBLineChartView // dataSource must implement - (NSUInteger)lineChartView:(JBLineChartView *)lineChartView numberOfVerticalValuesAtLineIndex:(NSUInteger)lineIndex");
if ([self.delegate respondsToSelector:@selector(lineChartView:shouldIgnoreSelectionAtIndex:)])
{
if([self.delegate lineChartView:self shouldIgnoreSelectionAtIndex:lineIndex])
{
continue;
}
}
if ([self.dataSource lineChartView:self numberOfVerticalValuesAtLineIndex:lineIndex] > rightHorizontalIndex)
{
NSArray *lineData = [self.chartData objectAtIndex:lineIndex];
@@ -988,13 +1009,13 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
{
return; // no touch for no data or collapsed
}
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [self clampPoint:[touch locationInView:self.linesView] toBounds:self.linesView.bounds padding:[self padding]];
NSUInteger lineIndex = self.linesView.selectedLineIndex != kJBLineChartLinesViewUnselectedLineIndex ? self.linesView.selectedLineIndex : [self lineIndexForPoint:touchPoint];
if ([[self.chartData objectAtIndex:lineIndex] count] <= 0)
if (lineIndex == kJBLineChartLinesViewUnselectedLineIndex || [[self.chartData objectAtIndex:lineIndex] count] <= 0)
{
return; // no touch for line without data
}
@@ -1017,7 +1038,6 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
self.verticalSelectionView.bgColor = verticalSelectionColor;
}
CGFloat xOffset = fmin(self.bounds.size.width - self.verticalSelectionView.frame.size.width, fmax(0, touchPoint.x - (ceil(self.verticalSelectionView.frame.size.width * 0.5))));
CGFloat yOffset = self.headerView.frame.size.height + self.headerPadding;
@@ -1065,6 +1085,7 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
[self.linesView setSelectedLineIndex:[self lineIndexForPoint:touchPoint] animated:YES];
[self.dotsView setSelectedLineIndex:[self lineIndexForPoint:touchPoint] animated:YES];
}
[self setVerticalSelectionViewVisible:NO animated:NO];
[self touchesBeganOrMovedWithTouches:touches];
}
@@ -1222,7 +1243,10 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
BOOL visiblePointFound = NO;
NSArray *sortedLineData = [lineData sortedArrayUsingSelector:@selector(compare:)];
CGFloat firstXPosition = 0.0f;
CGFloat lastXPosition = 0.0f;
CGFloat firstYPosition = 0.0f;
CGFloat lastXPosition = 0.0f;
CGFloat lastYPosition = 0.0f;
for (NSUInteger index = 0; index < [sortedLineData count]; index++)
{
JBLineChartPoint *lineChartPoint = [sortedLineData objectAtIndex:index];
@@ -1234,6 +1258,7 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
{
[path moveToPoint:CGPointMake(lineChartPoint.position.x, fmin(self.bounds.size.height - padding, fmax(padding, lineChartPoint.position.y)))];
firstXPosition = lineChartPoint.position.x;
firstYPosition = lineChartPoint.position.y;
visiblePointFound = YES;
}
else
@@ -1267,6 +1292,7 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
}
lastXPosition = lineChartPoint.position.x;
lastYPosition = lineChartPoint.position.y;
previousSlope = currentSlope;
}
previousLineChartPoint = lineChartPoint;
@@ -1321,8 +1347,11 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
if(visiblePointFound)
{
[fillPath addLineToPoint:CGPointMake(lastXPosition, self.bounds.size.height - padding)];
[fillPath addLineToPoint:CGPointMake(firstXPosition, self.bounds.size.height - padding)];
[fillPath addLineToPoint:CGPointMake(lastXPosition + ceil(padding * 0.5), lastYPosition)];
[fillPath addLineToPoint:CGPointMake(lastXPosition + ceil(padding * 0.5), self.bounds.size.height)];
[fillPath addLineToPoint:CGPointMake(firstXPosition - ceil(padding * 0.5), self.bounds.size.height)];
[fillPath addLineToPoint:CGPointMake(firstXPosition - ceil(padding * 0.5), firstYPosition)];
}
shapeFillLayer.path = fillPath.CGPath;
@@ -1368,7 +1397,9 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
{
NSAssert([self.delegate respondsToSelector:@selector(lineChartLinesView:colorForLineAtLineIndex:)], @"JBLineChartLinesView // delegate must implement - (UIColor *)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView colorForLineAtLineIndex:(NSUInteger)lineIndex");
((JBLineLayer *)layer).strokeColor = [self.delegate lineChartLinesView:self colorForLineAtLineIndex:((JBLineLayer *)layer).tag].CGColor;
((JBLineLayer *)layer).opacity = (weakSelf.selectedLineIndex == kJBLineChartLinesViewUnselectedLineIndex) ? 1.0f : kJBLineChartLinesViewDefaultDimmedOpacity;
NSAssert([self.delegate respondsToSelector:@selector(lineChartLinesView:dimmedSelectionOpacityAtLineIndex:)], @"JBLineChartLinesView // delegate must implement - (CGFloat)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView dimmedSelectionOpacityAtLineIndex:(NSUInteger)lineIndex");
((JBLineLayer *)layer).opacity = (weakSelf.selectedLineIndex == kJBLineChartLinesViewUnselectedLineIndex) ? 1.0f : [self.delegate lineChartLinesView:self dimmedSelectionOpacityAtLineIndex:((JBLineLayer *)layer).tag];
}
}
else if ([layer isKindOfClass:[JBFillLayer class]])
@@ -1383,7 +1414,9 @@ static UIColor *kJBLineChartViewDefaultDotSelectionColor = nil;
{
NSAssert([self.delegate respondsToSelector:@selector(lineChartLinesView:fillColorForLineAtLineIndex:)], @"JBLineChartLinesView // delegate must implement - (UIColor *)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView fillColorForLineAtLineIndex:(NSUInteger)lineIndex");
((JBFillLayer *)layer).fillColor = [self.delegate lineChartLinesView:self fillColorForLineAtLineIndex:((JBLineLayer *)layer).tag].CGColor;
((JBFillLayer *)layer).opacity = (weakSelf.selectedLineIndex == kJBLineChartLinesViewUnselectedLineIndex) ? 1.0f : kJBLineChartLinesViewDefaultDimmedOpacity;
NSAssert([self.delegate respondsToSelector:@selector(lineChartLinesView:dimmedSelectionOpacityAtLineIndex:)], @"JBLineChartLinesView // delegate must implement - (CGFloat)lineChartLinesView:(JBLineChartLinesView *)lineChartLinesView dimmedSelectionOpacityAtLineIndex:(NSUInteger)lineIndex");
((JBFillLayer *)layer).opacity = (weakSelf.selectedLineIndex == kJBLineChartLinesViewUnselectedLineIndex) ? 1.0f : [self.delegate lineChartLinesView:self dimmedSelectionOpacityAtLineIndex:((JBLineLayer *)layer).tag];
}
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "JBChartView"
s.version = "2.8.11"
s.version = "2.8.16"
s.summary = "Jawbone's iOS-based charting library for both line and bar graphs."
s.homepage = "https://github.com/Jawbone/JBChartView"
@@ -10,7 +10,7 @@ Pod::Spec.new do |s|
s.author = { "Terry Worona" => "tworona@jawbone.com" }
s.source = {
:git => "https://github.com/Jawbone/JBChartView.git",
:tag => "v2.8.11"
:tag => "v2.8.16"
}
s.platform = :ios, '6.0'
@@ -352,7 +352,7 @@
9B2E52F918218CF20079B9D2 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0510;
LastUpgradeCheck = 0710;
ORGANIZATIONNAME = Jawbone;
};
buildConfigurationList = 9B2E52FC18218CF20079B9D2 /* Build configuration list for PBXProject "JBChartViewDemo" */;
@@ -456,6 +456,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
@@ -519,6 +520,7 @@
GCC_PREFIX_HEADER = "JBChartViewDemo/JBChartViewDemo-Prefix.pch";
INFOPLIST_FILE = "JBChartViewDemo/JBChartViewDemo-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.jawbone.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
@@ -533,6 +535,7 @@
GCC_PREFIX_HEADER = "JBChartViewDemo/JBChartViewDemo-Prefix.pch";
INFOPLIST_FILE = "JBChartViewDemo/JBChartViewDemo-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.jawbone.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
@@ -12,7 +12,7 @@
#import "JBChartTooltipTipView.h"
// Numerics
CGFloat const kJBBaseChartViewControllerAnimationDuration = 0.25f;
CGFloat const kJBBaseChartViewControllerAnimationDuration = 0.1f;
@interface JBBaseChartViewController ()
@@ -55,10 +55,11 @@ CGFloat const kJBBaseChartViewControllerAnimationDuration = 0.25f;
[self.view bringSubviewToFront:self.tooltipTipView];
dispatch_block_t adjustTooltipPosition = ^{
CGPoint originalTouchPoint = [self.view convertPoint:touchPoint fromView:chartView];
CGPoint convertedTouchPoint = originalTouchPoint; // modified
JBChartView *chartView = [self chartView];
if (chartView)
if (chartView && !CGPointEqualToPoint(touchPoint, CGPointZero))
{
CGFloat minChartX = (chartView.frame.origin.x + ceil(self.tooltipView.frame.size.width * 0.5));
if (convertedTouchPoint.x < minChartX)
@@ -70,6 +71,7 @@ CGFloat const kJBBaseChartViewControllerAnimationDuration = 0.25f;
{
convertedTouchPoint.x = maxChartX;
}
self.tooltipView.frame = CGRectMake(convertedTouchPoint.x - ceil(self.tooltipView.frame.size.width * 0.5), CGRectGetMaxY(chartView.headerView.frame), self.tooltipView.frame.size.width, self.tooltipView.frame.size.height);
CGFloat minTipX = (chartView.frame.origin.x + self.tooltipTipView.frame.size.width);
@@ -83,33 +85,34 @@ CGFloat const kJBBaseChartViewControllerAnimationDuration = 0.25f;
originalTouchPoint.x = maxTipX;
}
self.tooltipTipView.frame = CGRectMake(originalTouchPoint.x - ceil(self.tooltipTipView.frame.size.width * 0.5), CGRectGetMaxY(self.tooltipView.frame), self.tooltipTipView.frame.size.width, self.tooltipTipView.frame.size.height);
}
}
};
dispatch_block_t adjustTooltipVisibility = ^{
self.tooltipView.alpha = _tooltipVisible ? 1.0 : 0.0;
self.tooltipTipView.alpha = _tooltipVisible ? 1.0 : 0.0;
};
if (tooltipVisible)
{
adjustTooltipPosition();
}
if (animated)
{
[UIView animateWithDuration:kJBBaseChartViewControllerAnimationDuration animations:^{
adjustTooltipVisibility();
} completion:^(BOOL finished) {
if (!tooltipVisible)
{
adjustTooltipPosition();
}
}];
if (tooltipVisible)
{
adjustTooltipPosition();
}
[UIView animateWithDuration:kJBBaseChartViewControllerAnimationDuration delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
adjustTooltipVisibility();
} completion:^(BOOL finished) {
if (!tooltipVisible)
{
adjustTooltipPosition();
}
}];
}
else
{
adjustTooltipVisibility();
adjustTooltipPosition();
adjustTooltipVisibility();
}
}
@@ -28,6 +28,12 @@
[self.view addSubview:self.tableView];
}
- (void)dealloc
{
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
@@ -33,7 +33,7 @@
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
@@ -29,6 +29,8 @@ CGFloat const kJBAreaChartViewControllerChartHeaderHeight = 75.0f;
CGFloat const kJBAreaChartViewControllerChartHeaderPadding = 20.0f;
CGFloat const kJBAreaChartViewControllerChartFooterHeight = 20.0f;
CGFloat const kJBAreaChartViewControllerChartLineWidth = 2.0f;
CGFloat const kJBAreaChartViewControllerChartSunLineDimmedOpacity = 1.0f;
CGFloat const kJBAreaChartViewControllerChartMoonLineDimmedOpacity = 0.0f;
NSInteger const kJBAreaChartViewControllerMaxNumChartPoints = 12;
// Strings
@@ -84,6 +86,12 @@ NSString * const kJBAreaChartViewControllerNavButtonViewKey = @"view";
return self;
}
- (void)dealloc
{
_lineChartView.delegate = nil;
_lineChartView.dataSource = nil;
}
#pragma mark - Data
- (void)initFakeData
@@ -192,6 +200,18 @@ NSString * const kJBAreaChartViewControllerNavButtonViewKey = @"view";
return YES;
}
- (CGFloat)lineChartView:(JBLineChartView *)lineChartView dimmedSelectionOpacityAtLineIndex:(NSUInteger)lineIndex
{
if (lineIndex == JBLineChartLineMoon)
{
return kJBAreaChartViewControllerChartMoonLineDimmedOpacity;
}
else
{
return kJBAreaChartViewControllerChartSunLineDimmedOpacity;
}
}
#pragma mark - JBLineChartViewDelegate
- (CGFloat)lineChartView:(JBLineChartView *)lineChartView verticalValueForHorizontalIndex:(NSUInteger)horizontalIndex atLineIndex:(NSUInteger)lineIndex
@@ -78,6 +78,12 @@ NSString * const kJBBarChartViewControllerNavButtonViewKey = @"view";
return self;
}
- (void)dealloc
{
_barChartView.delegate = nil;
_barChartView.dataSource = nil;
}
#pragma mark - Date
- (void)initFakeData
@@ -86,6 +86,12 @@ NSString * const kJBLineChartMissingPointsViewControllerNavButtonViewKey = @"vie
return self;
}
- (void)dealloc
{
_lineChartView.delegate = nil;
_lineChartView.dataSource = nil;
}
#pragma mark - Data
- (void)initFakeData
@@ -86,6 +86,12 @@ NSString * const kJBLineChartViewControllerNavButtonViewKey = @"view";
return self;
}
- (void)dealloc
{
_lineChartView.delegate = nil;
_lineChartView.dataSource = nil;
}
#pragma mark - Data
- (void)initFakeData
@@ -9,7 +9,7 @@
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.jawbone.${PRODUCT_NAME:rfc1034identifier}</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
+36 -4
View File
@@ -72,6 +72,15 @@ To initialize a <i>JBBarChartView</i>, you only need a few lines of code (see be
barChartView.dataSource = self;
barChartView.delegate = self;
[self addSubview:barChartView];
Just like you would for a `UITableView`, ensure you clear these properties in your `dealloc`:
- (void)dealloc
{
JBBarChartView *barChartView = ...; // i.e. _barChartView
barChartView.delegate = nil;
barChartView.dataSource = nil;
}
At a minimum, you need to inform the data source how many bars are in the chart:
@@ -99,9 +108,18 @@ Lastly, ensure you have set the *frame* of your barChartView & call *reloadData*
Similiarily, to initialize a JBLineChartView, you only need a few lines of code (see below). Line charts can also be initialized via a <b>nib</b> or with a <b>frame</b>.
JBLineChartView *lineChartView = [[JBLineChartView alloc] init];
lineChartView.dataSource = self;
lineChartView.delegate = self;
[self addSubview:lineChartView];
lineChartView.dataSource = self;
lineChartView.delegate = self;
[self addSubview:lineChartView];
Just like you would for a `UITableView`, ensure you clear these properties in your `dealloc`:
- (void)dealloc
{
JBLineChartView *lineChartView = ...; // i.e. _lineChartView
lineChartView.delegate = nil;
lineChartView.dataSource = nil;
}
At a minimum, you need to inform the data source how many lines and vertical data points (for each line) are in the chart:
@@ -261,7 +279,7 @@ As well, by default, each line will have squared off end caps and connection poi
- (BOOL)lineChartView:(JBLineChartView *)lineChartView smoothLineAtLineIndex:(NSUInteger)lineIndex;
Lastly, a line chart's selection events are delegated back via:
Furthermore, a line chart's selection events are delegated back via:
- (void)lineChartView:(JBLineChartView *)lineChartView didSelectLineAtIndex:(NSUInteger)lineIndex horizontalIndex:(NSUInteger)horizontalIndex touchPoint:(CGPoint)touchPoint
{
@@ -273,6 +291,20 @@ Lastly, a line chart's selection events are delegated back via:
// Update view
}
Upon selection, all other lines (+ fills) will be dimmed to 20% opacity (default). To change this value, implement:
- (CGFloat)lineChartView:(JBLineChartView *)lineChartView dimmedSelectionOpacityAtLineIndex:(NSUInteger)lineIndex
{
// Return new opacity (0.0 to hide completely, and 1.0 to have no effect)
}
If you don't want a line to be selectable:
- (BOOL)lineChartView:(JBLineChartView *)lineChartView shouldIgnoreSelectionAtIndex:(NSUInteger)lineIndex
{
return NO; // Check line index
}
The <b>touchPoint</b> is especially important as it allows you to add custom elements to your chart during selection events. Refer to the demo project (<b>JBLineChartViewController</b>) to see how a tooltip can be used to display additional information during selection events.
## Minimum & Maximum Values