首先 图片是以轮播图的形式放在一个UIScollVIew上,遇到的问题 第一手势不起作用 第二每次保存两张 第三 只能保存轮播图的第一张
Answer:1 图片的用户交互默认是关闭的
2 这个是由于没有判断手势的状态 ,应该判断当手势结束的时候不执行任何操作,直接返回;手势开始的时候才执行.第三 则是添加错了对象,应该给轮播图里的每一张图片都添加手势.代码如下
for (int i = 0; i<self.dataSource.count; i ++) {
self.headV = [[[UIImageView alloc]initWithFrame:CGRectMake(SCREENWIDTH *i, 0, SCREENWIDTH, HEIGHT * 4)]autorelease];
_scrollView.pagingEnabled = YES;
_scrollView.showsVerticalScrollIndicator = NO;
_scrollView.showsHorizontalScrollIndicator = NO;
[self.headV sd_setImageWithURL:[NSURL URLWithString:self.dataSource[i]]];
[self.scrollView addSubview:self.headV];
//添加手势将图片保存到本地相册
UILongPressGestureRecognizer*longG = [[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(savePicture:)]autorelease];
self.headV.userInteractionEnabled = YES;
[self.headV addGestureRecognizer:longG];
longG.minimumPressDuration = 1.0;//设置最小按压事件
longG.numberOfTouchesRequired = 1;//设置几个手指按压
longG.numberOfTapsRequired = 0;//设置按压几次
}
}
return [[_scrollView retain]autorelease];
}
#pragma mark 保存图片到到本地相册
- (void)savePicture:(UILongPressGestureRecognizer*)sender
{
//判断手势是开始状态还是结束状态
if (sender.state == UIGestureRecognizerStateEnded) {
return;
} else if (sender.state == UIGestureRecognizerStateBegan) {
UIImageView *imageV = (UIImageView *)sender.view;
UIImageWriteToSavedPhotosAlbum(imageV.image, nil, nil, nil);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"存储照片成功"
message:@"您已将照片存储于图片库中,打开照片程序即可查看。"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
}
UIImageWriteToSavedPhoto
这里说一下后面三个参数的含义:
void
);
id是target对象,sel是selector,即target对象上的方法名,contextInfo是任意指针,会传递到selector定义的方法上。一般是当完成后调用方法时使用,或者在完成时出错的处理。