From e5d9ed5f84859fb410808a01af331db45109693e Mon Sep 17 00:00:00 2001 From: Knut Inge Grosland <”hei@knutinge.com”> Date: Fri, 8 May 2015 23:13:02 +0200 Subject: [PATCH] Fix for: sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode is deprecated in iOS7 #1 --- .../PICircularProgressView.m | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/PICircularProgressView/PICircularProgressView.m b/PICircularProgressView/PICircularProgressView.m index 90a2c49..70af030 100644 --- a/PICircularProgressView/PICircularProgressView.m +++ b/PICircularProgressView/PICircularProgressView.m @@ -131,24 +131,41 @@ - (void)drawRect:(CGRect)rect CGFloat diagonal = 2 * (radius - circleWidth); CGFloat edge = diagonal / sqrtf(2); - CGFloat actualFontSize; CGSize maximumSize = CGSizeMake(edge, edge); - CGSize expectedSize = [progressString sizeWithFont:font - minFontSize:5.0 - actualFontSize:&actualFontSize - forWidth:maximumSize.width - lineBreakMode:NSLineBreakByWordWrapping]; + CGSize expectedSize = CGSizeZero; - if (actualFontSize < fontSize) - { - font = [font fontWithSize:actualFontSize]; + if ([progressString respondsToSelector:@selector(sizeWithAttributes:)]) { + expectedSize = [progressString sizeWithAttributes:@{NSFontAttributeName:font}]; + if (expectedSize.width > maximumSize.width) { + CGFloat ratio = maximumSize.width / expectedSize.width; + CGFloat fontSize = font.pointSize * ratio; + font = [font fontWithSize:fontSize]; + expectedSize = [progressString sizeWithAttributes:@{NSFontAttributeName:font}]; + } + } else { + // pre-iOS7.0 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + CGFloat actualFontSize; + expectedSize = [progressString sizeWithFont:font - minFontSize:5.0 - actualFontSize:&actualFontSize - forWidth:maximumSize.width - lineBreakMode:NSLineBreakByWordWrapping]; + minFontSize:5.0 + actualFontSize:&actualFontSize + forWidth:maximumSize.width + lineBreakMode:NSLineBreakByWordWrapping]; + + if (actualFontSize < fontSize) + { + font = [font fontWithSize:actualFontSize]; + expectedSize = [progressString sizeWithFont:font + minFontSize:5.0 + actualFontSize:&actualFontSize + forWidth:maximumSize.width + lineBreakMode:NSLineBreakByWordWrapping]; + } + #pragma clang diagnostic pop } - + CGPoint origin = CGPointMake(center.x - expectedSize.width / 2.0, center.y - expectedSize.height / 2.0); [_textColor setFill];