停止将图像保存到照片库

时间:2011-07-15 10:16:12

标签: objective-c ipad

如何停止保存图像。这已经存在于iphone照片库中。

此代码用于saveImage .....

-(IBAction)saveImage:(id)sender 
{

    NSLog(@"calling save");

    if (coverPage !=nil) 
    {
        NSData * imageData = UIImagePNGRepresentation(coverPage);
        UIImage *theImage = [UIImage imageWithData:imageData];
        UIImageWriteToSavedPhotosAlbum(theImage, self, nil, nil);
    }

    else {
        UIAlertView *alertView =[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Image is nil" delegate:self cancelButtonTitle:@"Cancle" otherButtonTitles:@"OK",nil];
        [alertView show];
        [alertView release];
    }
}

如果图像被保存并再次点击则照片正在保存.....如何在保存后停止保存图像。

3 个答案:

答案 0 :(得分:1)

如果没有更多的上下文,很难说,但从广义上讲,您可以使用变量来跟踪您之前是否已保存当前coverPage,并且如果有的话,只需避免重新保存它。例如:

-(IBAction)saveImage:(id)sender{
    NSLog(@"calling save");

    if (coverPageAlreadySaved) {
        UIAlertView *alertView =[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Silly user, you already saved this image." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil];
        [alertView show];
        [alertView release];
    }
    else if (coverPage !=nil) {
        NSData * imageData = UIImagePNGRepresentation(coverPage);
        UIImage *theImage = [UIImage imageWithData:imageData];
        UIImageWriteToSavedPhotosAlbum(theImage, self, nil, nil);
        coverPageAlreadySaved = YES;
    }
    else {
        UIAlertView *alertView =[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Image is nil" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil];
        [alertView show];
        [alertView release];
    }
}

...确保在coverPageAlreadySaved = NO发生更改时设置coverPage(无论您何时在代码中执行此操作)。

或者,由于您已经对nil进行了检查,您可以这样做:

-(IBAction)saveImage:(id)sender{
    NSLog(@"calling save");

    if (coverPage !=nil) {
        NSData * imageData = UIImagePNGRepresentation(coverPage);
        UIImage *theImage = [UIImage imageWithData:imageData];
        UIImageWriteToSavedPhotosAlbum(theImage, self, nil, nil);
        coverPage = nil;
    }
    else {
        UIAlertView *alertView =[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Image is nil" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil];
        [alertView show];
        [alertView release];
    }
}

...这将阻止图像重新保存,直到它在代码中的其他位置更新(此时我认为它计为新的coverPage)。

答案 1 :(得分:0)

如果它只是一个你要保存的图像,那么你可以用BOOL ivar执行这个标记,例如:

BOOL imageSaved;

每当你点击按钮时,它只会检查是否!imageSaved然后执行保存。  但如果它只是一个图像,那么你可以使用NSMutableArray.Like:

来做到这一点
NSMutableArray *savedImages;//it's an ivar

然后在执行保存操作之前:

NSString *imageName=......//Here I asssume you can get the image's name
if(!imageSaved)
 NSMutableArray *savedImages=[[NSMutableArray alloc]init];
if (![savedImages containsObject:imageName]){

.........这是保存操作 最后,将imageName添加到数组

 [savedimages addObject:imageName];
 }

我给你举了一个例子。您可能不知道保存的图像的名称。如果是这种情况,您可以标记图像(可以通过多种方式执行)并添加图像本身。

答案 2 :(得分:0)

UIButton也设为IBOutlet。然后在IBAction中将enabled属性设置为NO。在程序的其他位置将UIButton IBOutlet设置回YES以“重置”按钮。它类似于使用UIStepper,因为您必须将其声明两次...一次为IBAction,一次为IBOutlet

这将允许您使用按钮一次,然后将其“灰显”或“静音”以防止进一步激活。基本上,您要从UIGestureRecognizer停用UIButton

设置IBActionIBOutlet

- (IBAction)saveImageButton:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *saveImageButton;

在IBAction中将启用设置为NO。

- (IBAction)saveImageButton:(id)sender {
UIImageWriteToSavedPhotosAlbum(_processedImageView.image, nil, nil, nil);
_saveImageButton.enabled = NO;

}

然后在程序的其他位置将其更改为YES以“重置”按钮,以便您可以再次使用它。

_saveImageButton.enabled = YES;