我正在写一个用于从照片库中获取图像的类。我想要一个单一的方法,将从库中返回选定的图像。因此,我开始编写一个名为MediaBrowser的类。我使用的块将给出选定的图像。但是我对在哪里写块定义感到困惑。如果我出错了,请改正代码。
在MediaBrowser.h中
@interface MediaBrowser : NSObject
typedef UIImage* (^MediaBrowserCompletionHandler)(void);
+ (id)sharedInstance;
- (BOOL)startMediaBrowserFromViewController:(UIViewController*)controller
completionHandler:(MediaBrowserCompletionHandler)completion;
@end在MediaBrowser.m中
@interface MediaBrowser () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (nonatomic, strong) MediaBrowserCompletionHandler completionHandler;
@end
@implementation MediaBrowser
static MediaBrowser *sharedMediaBrowser = nil;
+ (id)sharedInstance
{
if (nil != sharedMediaBrowser) {
return sharedMediaBrowser;
}
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMediaBrowser = [[MediaBrowser alloc] init];
});
return sharedMediaBrowser;
}
- (BOOL)startMediaBrowserFromViewController:(UIViewController *)controller completionHandler:(MediaBrowserCompletionHandler)completion
{
self.completionHandler = [completion copy];
if (([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO)
|| (controller == nil))
return NO;
UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
// Displays saved pictures from the Camera Roll album.
mediaUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeImage, nil];
// Hides the controls for moving & scaling pictures, or for
// trimming movies. To instead show the controls, use YES.
mediaUI.allowsEditing = NO;
mediaUI.delegate = self;
[controller presentModalViewController:mediaUI animated:YES];
return YES;
}
// UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
UIImage *imageToUse;
// Handle a still image picked from a photo album
if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {
imageToUse = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
// Do something with imageToUse
if (self.completionHandler) {
// Pass here UIImage
self.completionHandler();
}
}
[picker dismissModalViewControllerAnimated:YES];
}
@end发布于 2013-08-13 20:15:39
我想出了答案。我想将选定的图像从UIImagePickerController发送到调用类。我写错了代码块。请参阅下面更正的代码。
在MediaBrowser.h中
块声明应该是:
typedef void (^MediaBrowserCompletionHandler)(UIImage *selectedImage);在MediaBroser.m中
调用块应为:
if (self.completionHandler) {
self.completionHandler(imageToUse);
}发布于 2013-08-13 17:53:33
typedef UIImage* (^MediaBrowserCompletionHandler)(void);
@interface MediaBrowser : NSObject
@property (nonatomic,copy) MediaBrowserCompletionHandler handler;
@end发布于 2013-08-13 17:29:17
这应该没问题。
typedef UIImage* (^MediaBrowserCompletionHandler)(void);
@interface MediaBrowser : NSObject
....
@endhttps://stackoverflow.com/questions/18205312
复制相似问题