The contentMode was not properly managed. (reverted from commit b0fae6539f68aca145a30963aac27defdb42933f)

This commit is contained in:
ylecollen 2015-01-07 12:17:19 +01:00
parent e9512ac7ea
commit 342db04488
3 changed files with 285 additions and 1 deletions

View file

@ -0,0 +1,40 @@
/*
Copyright 2014 OpenMarket Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import <UIKit/UIKit.h>
// Customize UIImageView in order to let UIImageView handle automatically remote url
@interface CustomImageView : UIImageView
typedef void (^blockCustomImageView_onClick)(CustomImageView *imageView, NSString* title);
@property (strong, nonatomic) NSString *placeholder;
@property (strong, nonatomic) NSString *imageURL;
// Use this boolean to hide activity indicator during image downloading
@property (nonatomic) BOOL hideActivityIndicator;
// Information about the media represented by this image (image, video...)
@property (strong, nonatomic) NSDictionary *mediaInfo;
// Let the user defines some custom buttons over the tabbar
- (void)setLeftButtonTitle :leftButtonTitle handler:(blockCustomImageView_onClick)handler;
- (void)setRightButtonTitle:rightButtonTitle handler:(blockCustomImageView_onClick)handler;
- (void)dismissSelection;
@end

View file

@ -0,0 +1,244 @@
/*
Copyright 2014 OpenMarket Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import "CustomImageView.h"
#import "MediaManager.h"
#import "AppDelegate.h"
@interface CustomImageView () {
id imageLoader;
UIActivityIndicatorView *loadingWheel;
// validation buttons
UIButton* leftButton;
UIButton* rightButton;
NSString* leftButtonTitle;
NSString* rightButtonTitle;
blockCustomImageView_onClick leftHandler;
blockCustomImageView_onClick rightHandler;
UIView* bottomBarView;
}
@end
@implementation CustomImageView
#define CUSTOM_IMAGE_VIEW_BUTTON_WIDTH 100
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
leftButtonTitle = nil;
leftHandler = nil;
rightButtonTitle = nil;
rightHandler = nil;
self.backgroundColor = [UIColor blackColor];
self.contentMode = UIViewContentModeScaleAspectFit;
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
}
return self;
}
- (void)dealloc {
if (imageLoader) {
[MediaManager cancel:imageLoader];
imageLoader = nil;
}
if (loadingWheel) {
[loadingWheel removeFromSuperview];
loadingWheel = nil;
}
if (bottomBarView) {
[bottomBarView removeFromSuperview];
bottomBarView = nil;
}
}
- (void)startActivityIndicator {
// Add activity indicator if none
if (loadingWheel == nil) {
loadingWheel = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self addSubview:loadingWheel];
}
// Adjust position
CGPoint center = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
loadingWheel.center = center;
// Adjust color
if ([self.backgroundColor isEqual:[UIColor blackColor]]) {
loadingWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
} else {
loadingWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
}
// Start
[loadingWheel startAnimating];
}
- (void)stopActivityIndicator {
if (loadingWheel) {
[loadingWheel stopAnimating];
}
}
#pragma mark -
- (IBAction)onButtonToggle:(id)sender
{
if (sender == leftButton) {
dispatch_async(dispatch_get_main_queue(), ^{
leftHandler(self, leftButtonTitle);
});
} else if (sender == rightButton) {
dispatch_async(dispatch_get_main_queue(), ^{
rightHandler(self, rightButtonTitle);
});
}
}
// add a generic button to the bottom view
// return the added UIButton
- (UIButton*) addbuttonWithTitle:(NSString*)title {
UIButton* button = [[UIButton alloc] init];
[button setTitle:title forState:UIControlStateNormal];
[button setTitle:title forState:UIControlStateHighlighted];
// default background text color
CGFloat textColorFactor = 146.0 / 255.0;
UIColor* textColor = [UIColor colorWithRed:textColorFactor green:textColorFactor blue:textColorFactor alpha:1.0];
[button setTitleColor:textColor forState:UIControlStateNormal];
[button setTitleColor:textColor forState:UIControlStateHighlighted];
// keep the bottomView background color
button.backgroundColor = [UIColor clearColor];
[button addTarget:self action:@selector(onButtonToggle:) forControlEvents:UIControlEventTouchUpInside];
[bottomBarView addSubview:button];
return button;
}
- (void)layoutSubviews {
// call upper layer
[super layoutSubviews];
// check if the dedicated buttons are already added
if (leftButtonTitle || rightButtonTitle) {
if (!bottomBarView) {
bottomBarView = [[UIView alloc] init];
if (leftButtonTitle) {
leftButton = [self addbuttonWithTitle:leftButtonTitle];
}
rightButton = [[UIButton alloc] init];
if (rightButtonTitle) {
rightButton = [self addbuttonWithTitle:rightButtonTitle];
}
// default tabbar background color
CGFloat base = 248.0 / 255.0f;
bottomBarView.backgroundColor = [UIColor colorWithRed:base green:base blue:base alpha:1.0];
[[AppDelegate theDelegate].masterTabBarController.tabBar addSubview:bottomBarView];
}
// manage the item
CGRect tabBarFrame = [AppDelegate theDelegate].masterTabBarController.tabBar.frame;
tabBarFrame.origin.y = 0;
bottomBarView.frame = tabBarFrame;
if (leftButton) {
leftButton.frame = CGRectMake(0, 0, CUSTOM_IMAGE_VIEW_BUTTON_WIDTH, bottomBarView.frame.size.height);
}
if (rightButton) {
rightButton.frame = CGRectMake(bottomBarView.frame.size.width - CUSTOM_IMAGE_VIEW_BUTTON_WIDTH, 0, CUSTOM_IMAGE_VIEW_BUTTON_WIDTH, bottomBarView.frame.size.height);
}
}
}
- (void)setHideActivityIndicator:(BOOL)hideActivityIndicator {
_hideActivityIndicator = hideActivityIndicator;
if (hideActivityIndicator) {
[self stopActivityIndicator];
} else if (imageLoader) {
// Loading is in progress, start activity indicator
[self startActivityIndicator];
}
}
- (void)setImageURL:(NSString *)imageURL {
// Cancel media loader in progress (if any)
if (imageLoader) {
[MediaManager cancel:imageLoader];
imageLoader = nil;
}
_imageURL = imageURL;
// Reset image view
self.image = nil;
if (_placeholder) {
// Set picture placeholder
self.image = [UIImage imageNamed:_placeholder];
}
// Consider provided url to update image view
if (imageURL) {
// Load picture
if (!_hideActivityIndicator) {
[self startActivityIndicator];
}
imageLoader = [MediaManager loadPicture:imageURL
success:^(UIImage *image) {
[self stopActivityIndicator];
self.image = image;
}
failure:^(NSError *error) {
[self stopActivityIndicator];
NSLog(@"Failed to download image (%@): %@", imageURL, error);
}];
}
}
#pragma mark - buttons management
- (void)setLeftButtonTitle: aLeftButtonTitle handler:(blockCustomImageView_onClick)handler {
leftButtonTitle = aLeftButtonTitle;
leftHandler = handler;
}
- (void)setRightButtonTitle:aRightButtonTitle handler:(blockCustomImageView_onClick)handler {
rightButtonTitle = aRightButtonTitle;
rightHandler = handler;
}
- (void)dismissSelection {
if (bottomBarView) {
[bottomBarView removeFromSuperview];
bottomBarView = nil;
}
}
@end

View file

@ -287,7 +287,7 @@
imageView = [[UIImageView alloc] init];
imageView.backgroundColor = [UIColor clearColor];
imageView.contentMode = self.contentMode;
imageView.contentMode = UIViewContentModeScaleAspectFit;
[scrollView addSubview:imageView];
}
}