// // IDMCaptionView.m // IDMPhotoBrowser // // Created by Michael Waterfall on 30/12/2011. // Copyright (c) 2011 __MyCompanyName__. All rights reserved. // #import "IDMCaptionView.h" #import "IDMPhoto.h" #import static const CGFloat labelPadding = 10; // Private @interface IDMCaptionView () { id _photo; UILabel *_label; } @end @implementation IDMCaptionView - (id)initWithPhoto:(id)photo { CGRect screenBound = [[UIScreen mainScreen] bounds]; CGFloat screenWidth = screenBound.size.width; if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) { screenWidth = screenBound.size.height; } self = [super initWithFrame:CGRectMake(0, 0, screenWidth, 44)]; // Random initial frame if (self) { _photo = photo; self.opaque = NO; [self setBackground]; [self setupCaption]; } return self; } - (CGSize)sizeThatFits:(CGSize)size { if (_label.text.length == 0) return CGSizeZero; CGFloat maxHeight = 9999; if (_label.numberOfLines > 0) maxHeight = _label.font.leading*_label.numberOfLines; /*CGSize textSizeOLD = [_label.text sizeWithFont:_label.font constrainedToSize:CGSizeMake(size.width - labelPadding*2, maxHeight) lineBreakMode:_label.lineBreakMode];*/ NSString *text = _label.text; CGFloat width = size.width - labelPadding*2; UIFont *font = _label.font; NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font}]; CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, maxHeight} options:NSStringDrawingUsesLineFragmentOrigin context:nil]; CGSize textSize = rect.size; return CGSizeMake(size.width, textSize.height + labelPadding * 2); } - (void)setupCaption { _label = [[UILabel alloc] initWithFrame:CGRectMake(labelPadding, 0, self.bounds.size.width-labelPadding*2, self.bounds.size.height)]; _label.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; _label.opaque = NO; _label.backgroundColor = [UIColor clearColor]; _label.textAlignment = NSTextAlignmentCenter; _label.lineBreakMode = NSLineBreakByWordWrapping; _label.numberOfLines = 3; _label.textColor = [UIColor whiteColor]; _label.shadowColor = [UIColor colorWithWhite:0 alpha:0.5]; _label.shadowOffset = CGSizeMake(0, 1); _label.font = [UIFont systemFontOfSize:17]; if ([_photo respondsToSelector:@selector(caption)]) { _label.text = [_photo caption] ? [_photo caption] : @" "; } [self addSubview:_label]; } - (void)setBackground { UIView *fadeView = [[UIView alloc] initWithFrame:CGRectMake(0, -100, 10000, 130+100)]; // Static width, autoresizingMask is not working CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = fadeView.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithWhite:0 alpha:0.0] CGColor], (id)[[UIColor colorWithWhite:0 alpha:0.8] CGColor], nil]; [fadeView.layer insertSublayer:gradient atIndex:0]; fadeView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; //UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin; [self addSubview:fadeView]; } @end