This repository has been archived on 2025-08-18. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
JPImagePickerController/Classes/JPImagePickerDetailController.m
2012-02-06 20:40:13 +01:00

174 lines
5.5 KiB
Objective-C

//
// JPImagePickerDetailController.m
// JPImagePickerController
//
// Created by Jeena on 11.11.09.
// Copyright 2009 Jeena Paradies.
// Licence: MIT-Licence
//
#import "JPImagePickerDetailController.h"
@implementation JPImagePickerDetailController
@synthesize previewImageView, overviewController, imageNumber;
@synthesize largeImage, scrollView;
#define IMAGE_WIDTH 320
#define IMAGE_HEIGHT 400
- (id)initWithOverviewController:(JPImagePickerOverviewController *)newOverviewController {
if (self = [super initWithNibName:@"JPImagePickerDetailController" bundle:nil]) {
// Custom initialization
overviewController = newOverviewController;
imageNumber = -1;
}
return self;
}
- (void)dealloc {
[previewImageView release];
[overviewController release];
[largeImage release];
[scrollView release];
[super dealloc];
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated {
originalStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:YES];
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self prepareForImageNumber:imageNumber];
}
/*
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
*/
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
/*
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
}
*/
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/
- (void)prepareForImageNumber:(NSInteger)newImageNumber {
imageNumber = newImageNumber;
UIImage * image = [[overviewController.imagePickerController.dataSource
imagePicker:overviewController.imagePickerController
imageForImageNumber:imageNumber]
scaleToSize:CGSizeMake(kJPImagePickerControllerPreviewImageSizeWidth, kJPImagePickerControllerPreviewImageSizeHeight)
onlyIfNeeded:YES];
self.previewImageView = [[UIImageView alloc] initWithImage:image];
self.largeImage = image;
//Center the image code
CGRect frameToCenter = previewImageView.frame;
CGSize boundsSize = CGSizeMake(kJPImagePickerControllerPreviewImageSizeWidth, kJPImagePickerControllerPreviewImageSizeHeight);
if (frameToCenter.size.width < boundsSize.width)
frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
frameToCenter.origin.x = 0;
// center vertically
if (frameToCenter.size.height < boundsSize.height)
frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
frameToCenter.origin.y = 0;
previewImageView.frame = frameToCenter;
//Create Scroll view and add the ImageViewController.
scrollView.contentSize = CGSizeMake(kJPImagePickerControllerPreviewImageSizeWidth, kJPImagePickerControllerPreviewImageSizeHeight);
[scrollView addSubview:previewImageView];
scrollView.minimumZoomScale = 0.4;
scrollView.maximumZoomScale = 8.0;
scrollView.delegate = self;
[scrollView setZoomScale:1];
}
- (IBAction)cancelPreview:(id)sender {
[[UIApplication sharedApplication] setStatusBarStyle:originalStatusBarStyle animated:YES];
[previewImageView removeFromSuperview];
[self.navigationController popViewControllerAnimated:YES];
}
- (IBAction)finishedPicking:(id)sender {
[[UIApplication sharedApplication] setStatusBarStyle:overviewController.imagePickerController.originalStatusBarStyle animated:YES];
[overviewController.imagePickerController.delegate imagePicker:overviewController.imagePickerController didFinishPickingWithImageNumber:imageNumber];
}
#pragma mark ScrollView Bits
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollview {
return previewImageView;
}
- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center {
CGRect zoomRect;
// the zoom rect is in the content view's coordinates.
// At a zoom scale of 1.0, it would be the size of the imageScrollView's bounds.
// As the zoom scale decreases, so more content is visible, the size of the rect grows.
zoomRect.size.height = [self.scrollView frame].size.height / scale;
zoomRect.size.width = [self.scrollView frame].size.width / scale;
// choose an origin so as to get the right center.
zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0);
return zoomRect;
}
- (void)zoomAction:(UIGestureRecognizer *)gestureRecognizer {
// double tap zooms in
float newScale = [self.scrollView zoomScale] * 2;
CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];
[self.scrollView zoomToRect:zoomRect animated:YES];
}
#pragma mark
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
@end