// // ViewController.m // 长按,弹出 菜单控制器 下载图片 // // Created by beyond on 15-3-26. // Copyright (c) 2015年 beyond.com All rights reserved. // #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 新增添加长按手势 UILongPressGestureRecognizer *longTap = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longTap:)]; [self.view addGestureRecognizer:longTap]; } // 新增添加长按手势 - (void)longTap:(UILongPressGestureRecognizer *)reco { if ([reco state]==UIGestureRecognizerStateBegan) { [[reco view]becomeFirstResponder]; CGPoint loc = [reco locationInView:nil]; UIMenuController *mCtrl = [UIMenuController sharedMenuController]; UIMenuItem *item = [[UIMenuItem alloc]initWithTitle:@"保存" action:@selector(saveClick:)]; [mCtrl setMenuItems:[NSArray arrayWithObject:item]]; // 这儿有问题!!!! // CGPoint loc = reco. [mCtrl setTargetRect:CGRectMake(loc.x, loc.y-20, 0, 0) inView:[reco view] ]; [mCtrl setMenuVisible:YES animated:YES]; } } // 必须实现 - (BOOL)canBecomeFirstResponder{ return YES; } -(BOOL) canPerformAction:(SEL)action withSender:(id)sender{ if (action == @selector(saveClick:) ) { return YES; } return NO; //隐藏系统默认的菜单项 } // 新增添加长按手势 - (void)saveClick:(id)sender { if (self.imageView.image) { UIImageWriteToSavedPhotosAlbum(self.imageView.image, nil, nil, nil); UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); } } // 写到文件的完成时执行 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { //[SVProgressHUD showSuccessWithStatus:@"图片已储存"]; // UIButton *btn = (UIButton *)[_footView viewWithTag:VHelpDetailFootViewBtnTypeFont]; // btn.enabled = YES; } #pragma mark - 补充 下载图片 - (void)downBtnClick:(UIButton *)btn { UIButton *btn = (UIButton *)[_footView viewWithTag:VHelpDetailFootViewBtnTypeFont]; btn.enabled = NO; if ([_currentPhoto underlyingImage]) { // 直接写到文件 [self writeImgToFile]; } else { // 改成新的 远程下载图片 [self downloadImgAsync]; } } //下载图片 #import "SDWebImageDecoder.h" #import "SDWebImageManager.h" #import "SDWebImageOperation.h" - (void)downloadImgAsync { // Load async from web (using SDWebImage) [SVProgressHUD showSuccessWithStatus:@"图片保存中"]; @try { [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:_currentImgUrl] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { if (expectedSize > 0) { float progress = receivedSize / (float)expectedSize; NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithFloat:progress], @"progress", self, @"photo", nil]; [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_PROGRESS_NOTIFICATION object:dict]; } } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { if (error) { MWLog(@"SDWebImage failed to download image: %@", error); } // 写到文件 UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); }]; } @catch (NSException *e) { MWLog(@"Photo from web: %@", e); } } @end
原文:http://blog.csdn.net/pre_eminent/article/details/44671675