私はios 5用のxcode 4.2に取り組んでおり、iphone 4Sで小さなアプリケーションをテストしています。ARC あり、絵コンテなし。学習するアプリケーションを作成しようとするので、最初のビュー メニュー (2 番目のビューをダウンロードするボタンが 1 つだけの xib ファイル、HHKMenuViewController.h および .m) と 2 番目のビュー (UIImage を含む xib ファイルと .m) でアプリケーションをテストします。 2 つのボタン、HHKListViewController.h および .m)。2 番目のビューでは、ユーザーがイメージ ライブラリでイメージを取得する (最初のボタン) か、最初のビュー メニューに戻る (2 番目のボタン) ことができます。
それは仕事です。エラーはありません。iOSシミュレーターでコンパイルすると、表示されるメニューがあります。ボタンをクリックすると 2 番目のビューに移動し、[画像を選択] ボタンをクリックすると画像を選択でき、この画像は 2 番目のビューの画像のフレームに表示されます。大丈夫です。
しかし、私が最初のビューを作成するとき-> 2番目のビュー(ボタンをクリックして戻る)->最初のビュー...画像ライブラリに移動したいときに約10回、iOSシミュレーターがフリーズし(エラーなしのXcode)、できません何でもする。これは私のiPhone 4sでも同じです。インストルメント (開発者ツール) を使用してメモリのアクティビティを確認しようとしましたが、他のアプリケーションとの関係で問題はありません。
提案はありますか?
ご協力ありがとうございました。
-----------HHKAppDelegate.h------------------
#import <UIKit/UIKit.h>
@class HHKMenuViewController;
@interface HHKAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) HHKMenuViewController *menuViewController;
@end
-----------HHKAppDelegate.m-------------------
#import "HHKAppDelegate.h"
#import "HHKMenuViewController.h"
@implementation HHKAppDelegate
@synthesize window = _window;
@synthesize menuViewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen]applicationFrame]];
// Override point for customization after application launch
self.menuViewController = [[HHKMenuViewController alloc] initWithNibName:@"HHKMenuViewController" bundle:nil];
UIView *menuView = self.menuViewController.view;
[self.window addSubview:menuView];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
@end
---------HHKMenuViewController.h---------------
#import <UIKit/UIKit.h>
#import <mach/mach.h>
@class HHKListViewController;
@class HHKMenuViewController;
@interface HHKMenuViewController : UIViewController
@property (strong, nonatomic) HHKListViewController *listViewController;
@property (strong, nonatomic) HHKMenuViewController *menuViewController;
- (IBAction)listButtonPressed:(id)sender;
@end
--------HHKMenuViewController.m----------------
#import "HHKMenuViewController.h"
#import "HHKListViewController.h"
@implementation HHKMenuViewController
@synthesize listViewController;
@synthesize menuViewController;
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
self.listViewController = nil;}
#pragma mark - View lifecycle
- (void)viewDidUnload
{
[super viewDidUnload];
self.listViewController = nil;}
- (IBAction)listButtonPressed:(id)sender {
self.menuViewController = [[HHKMenuViewController alloc] initWithNibName:@"HHKMenuViewController" bundle:nil];
UIView *menuView = self.menuViewController.view;
self.listViewController = [[HHKListViewController alloc] initWithNibName:@"HHKListViewController" bundle:nil];
UIView *listView = self.listViewController.view;
[UIView transitionWithView:self.view duration:0.75 options:UIViewAnimationOptionTransitionCurlUp
animations:^{[menuView removeFromSuperview];[self.view insertSubview:listView aboveSubview:menuView];}
completion:NULL];}
@end
----------HHKListViewController.h-----------------
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
@class HHKMenuViewController;
@class HHKListViewController;
@interface HHKListViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (strong, nonatomic) HHKMenuViewController *menuViewController;
@property (strong, nonatomic) HHKListViewController *listViewController;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (strong, nonatomic) UIImage *image;
@property (copy, nonatomic) NSString *lastChosenMediaType;
@property (assign, nonatomic) CGRect imageFrame;
-(IBAction)backMenuList:(id)sender;
-(IBAction)selectExistingPicture:(id)sender;
@end
----------HHKListViewController.m------------------
#import "HHKListViewController.h"
#import "HHKMenuViewController.h"
#import <MobileCoreServices/UTCoreTypes.h>
#import <mach/mach.h>
@interface HHKListViewController ()
static UIImage *shrinkImage(UIImage *original, CGSize size);
-(void)updateDisplay;
-(void)getMediaFromSource:(UIImagePickerControllerSourceType)sourceType;
@end
@implementation HHKListViewController
@synthesize menuViewController;
@synthesize listViewController;
@synthesize imageView;
@synthesize image;
@synthesize lastChosenMediaType;
@synthesize imageFrame;
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
imageFrame = imageView.frame;}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self updateDisplay];}
- (void)viewDidUnload
{
[super viewDidUnload];
self.imageView = nil;
self.listViewController = nil;}
-(IBAction)backMenuList:(id)sender {
self.menuViewController = [[HHKMenuViewController alloc] initWithNibName:@"HHKMenuViewController" bundle:nil];
UIView *menuView = self.menuViewController.view;
self.listViewController = [[HHKListViewController alloc] initWithNibName:@"HHKListViewController" bundle:nil];
UIView *listView = self.listViewController.view;
[UIView transitionWithView:self.view duration:0.75 options:UIViewAnimationOptionTransitionCurlDown
animations:^{
[listView removeFromSuperview];
[self.view insertSubview:menuView aboveSubview:listView];
}
completion:NULL];}
- (IBAction)selectExistingPicture:(id)sender {
[self getMediaFromSource:UIImagePickerControllerSourceTypePhotoLibrary];}
/*---------------------------------------------------------------*/
/*--------------------------------------------------------------*/
#pragma mark UIImagePickerController delegate methods
-(void)imagePickerController :(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = [info objectForKey:UIImagePickerControllerEditedImage];
UIImage *shrunkenImage = shrinkImage(chosenImage, imageFrame.size);
self.image = shrunkenImage;
[picker dismissModalViewControllerAnimated: YES]; }
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[picker dismissModalViewControllerAnimated:YES];}
#pragma mark -
static UIImage *shrinkImage(UIImage *original, CGSize size) {
CGFloat scale = [UIScreen mainScreen].scale;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, size.width * scale,size.height * scale, 8, 0, colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context,CGRectMake(0, 0, size.width * scale, size.height * scale),original.CGImage);
CGImageRef shrunken = CGBitmapContextCreateImage(context);
UIImage *final = [UIImage imageWithCGImage:shrunken];
CGContextRelease(context);
CGImageRelease(shrunken);
return final;}
-(void)updateDisplay {
imageView.image = image;
imageView.hidden = NO;}
- (void)getMediaFromSource:(UIImagePickerControllerSourceType)sourceType {
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:sourceType];
if ([UIImagePickerController isSourceTypeAvailable:sourceType] && [mediaTypes count] > 0) {
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:sourceType];
UIImagePickerController *picker =[[UIImagePickerController alloc] init];
picker.mediaTypes = mediaTypes;
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = sourceType;
[self presentModalViewController:picker animated:YES];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error accessing media" message:@"Device doesn’t support that media source."
delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];
[alert show];}}
@end