From 4813b753ffa9a76e6e12ff8bf4dcb44f0cbf935e Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 8 Dec 2015 11:35:16 +0100 Subject: [PATCH] UI: fix rounded / bordered images definitively(?!!) --- Classes/Base.lproj/CallView.xib | 2 +- Classes/Base.lproj/ContactDetailsView.xib | 2 +- Classes/Base.lproj/HistoryDetailsView.xib | 6 +-- Classes/HistoryDetailsView.m | 1 + Classes/LinphoneUI/UICompositeView.m | 6 ++- Classes/LinphoneUI/UIRoundedImageView.m | 48 +++++++++++------------ Classes/Utils/Utils.m | 5 ++- 7 files changed, 38 insertions(+), 32 deletions(-) diff --git a/Classes/Base.lproj/CallView.xib b/Classes/Base.lproj/CallView.xib index 5f8e54a36..fd1c1707f 100644 --- a/Classes/Base.lproj/CallView.xib +++ b/Classes/Base.lproj/CallView.xib @@ -63,7 +63,7 @@ - + diff --git a/Classes/Base.lproj/ContactDetailsView.xib b/Classes/Base.lproj/ContactDetailsView.xib index 6690ef02b..60ee7377c 100644 --- a/Classes/Base.lproj/ContactDetailsView.xib +++ b/Classes/Base.lproj/ContactDetailsView.xib @@ -283,7 +283,7 @@ - + diff --git a/Classes/Base.lproj/HistoryDetailsView.xib b/Classes/Base.lproj/HistoryDetailsView.xib index 25bcadff9..92909a139 100644 --- a/Classes/Base.lproj/HistoryDetailsView.xib +++ b/Classes/Base.lproj/HistoryDetailsView.xib @@ -203,7 +203,7 @@ - + @@ -217,7 +217,7 @@ - + @@ -290,7 +290,7 @@ - + diff --git a/Classes/HistoryDetailsView.m b/Classes/HistoryDetailsView.m index ebf463cbd..82a7326d9 100644 --- a/Classes/HistoryDetailsView.m +++ b/Classes/HistoryDetailsView.m @@ -64,6 +64,7 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; + [self update]; [_tableView loadDataForAddress:(callLog ? linphone_call_log_get_remote_address(callLog) : NULL)]; [[NSNotificationCenter defaultCenter] addObserver:self diff --git a/Classes/LinphoneUI/UICompositeView.m b/Classes/LinphoneUI/UICompositeView.m index 14426b4f4..8623f15c8 100644 --- a/Classes/LinphoneUI/UICompositeView.m +++ b/Classes/LinphoneUI/UICompositeView.m @@ -285,7 +285,11 @@ - (void)clearCache:(NSArray *)exclude { for (NSString *key in [viewControllerCache allKeys]) { bool remove = true; - if (exclude != nil) { + + /*ImagePickerView can be used as popover and we do NOT want to free it*/; + if ([key isEqualToString:ImagePickerView.compositeViewDescription.content]) { + remove = false; + } else if (exclude != nil) { for (UICompositeViewDescription *description in exclude) { if ([key isEqualToString:description.content] || [key isEqualToString:description.statusBar] || [key isEqualToString:description.tabBar] || [key isEqualToString:description.sideMenu]) { diff --git a/Classes/LinphoneUI/UIRoundedImageView.m b/Classes/LinphoneUI/UIRoundedImageView.m index b27419d99..2bed32d38 100644 --- a/Classes/LinphoneUI/UIRoundedImageView.m +++ b/Classes/LinphoneUI/UIRoundedImageView.m @@ -16,18 +16,17 @@ INIT_WITH_COMMON { borderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; + borderView.layer.borderWidth = 10; + borderView.layer.borderColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"color_A.png"]].CGColor; borderView.hidden = YES; [self addSubview:borderView]; + [self setBordered:NO]; [self setRoundRadius]; - [self setBordered:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; - - // self.layer.borderWidth = 1; - // self.layer.borderColor = [UIColor redColor].CGColor; return self; } @@ -37,6 +36,7 @@ INIT_WITH_COMMON { - (void)orientationDidChange:(NSNotification *)k { [self setRoundRadius]; + [self layoutSubviews]; } - (void)setImage:(UIImage *)image { @@ -45,36 +45,36 @@ INIT_WITH_COMMON { - (void)setImage:(UIImage *)image bordered:(BOOL)bordered withRoundedRadius:(BOOL)rounded { // We have to scale image to layers limits so that when we round image, we have a proper circle - [super setImage:[image scaleToSize:self.frame.size squared:YES]]; + [super setImage:image]; [self setBordered:bordered]; [self setRoundRadius]; } - (void)setBordered:(BOOL)bordered { borderView.hidden = !bordered; - if (bordered) { - CGRect frame = self.frame; - frame.size.height = frame.size.width = MIN(self.layer.frame.size.height, self.layer.frame.size.width); - frame.origin.x = (self.frame.size.width - frame.size.width) / 2; - frame.origin.y = (self.frame.size.height - frame.size.height) / 2; - borderView.frame = frame; - self.layer.borderWidth = 10; - // [borderView.layer setCornerRadius:frame.size.height / 2]; - self.layer.borderColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"color_A.png"]].CGColor; - } else { - self.layer.borderWidth = 0; - } } - +- (CGRect)computeBox { + CGFloat min = MIN(self.frame.size.width, self.frame.size.height); + CGRect box = CGRectMake((self.frame.size.width - min) / 2, (self.frame.size.height - min) / 2, min, min); + return box; +} - (void)setRoundRadius { - CALayer *imageLayer = self.layer; + CGRect box = [self computeBox]; - CGFloat height = imageLayer.frame.size.height; - CGFloat width = imageLayer.frame.size.width; - CGFloat roundRadius = MIN(width, height) / 2; + borderView.frame = box; + borderView.layer.cornerRadius = borderView.frame.size.height / 2; - [imageLayer setCornerRadius:roundRadius]; - [imageLayer setMasksToBounds:YES]; + CGPathRef path = CGPathCreateWithEllipseInRect(box, NULL); + UIBezierPath *maskPath = [UIBezierPath bezierPathWithCGPath:path]; + CAShapeLayer *maskLayer = [CAShapeLayer layer]; + maskLayer.frame = self.bounds; + maskLayer.path = maskPath.CGPath; + self.layer.mask = maskLayer; } +- (void)layoutSubviews { + [super layoutSubviews]; + borderView.frame = [self computeBox]; + borderView.layer.cornerRadius = borderView.frame.size.height / 2; +} @end diff --git a/Classes/Utils/Utils.m b/Classes/Utils/Utils.m index c8a894729..673255747 100644 --- a/Classes/Utils/Utils.m +++ b/Classes/Utils/Utils.m @@ -500,8 +500,9 @@ void linphone_iphone_log_handler(int lev, const char *fmt, va_list args) { size.width = size.height = MAX(size.width, size.height); } - UIGraphicsBeginImageContext(scaledImage.size); - [scaledImage drawInRect:CGRectMake(0, 0, scaledImage.size.width, scaledImage.size.height)]; + UIGraphicsBeginImageContext(size); + + [scaledImage drawInRect:CGRectMake(0, 0, size.width, size.height)]; scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();