有一段时间没写博客了, "持之以恒"徽章都暗了, 实在不该。 前一段确实比较忙, ...小小地给自己的懒找个借口吧。 大二即将结束, 学习iOS也有一段时间了。今天抽点时间, 开源一个前几天刚上传的App里面的一个功能, RT, 美女图片采集器。 美女.. 相信没有人不喜欢吧, 基于此, 这个小Demo应运而生。
本文正在参加博客大赛。 如果觉得对你有所帮助, 还望帮忙投下票。 多谢。
投票链接: http://vote.blog.csdn.net/Article/Details?articleid=37825177 (投票按钮在最下方)
看到这里, 如果还有兴趣学习的话, 可以先到我的git中下载源码, 然后配合着源码看我下面的解析。相信, 会让你有所收获的。
git下载链接: BeautyPickDemo.git
@property (nonatomic,strong) ASIHTTPRequest *testRequest;
-
NSString* urlString = [
NSString stringWithFormat:
@"http://image.baidu.com/channel/listjson?pn=%d&rn=10&tag1=美女&tag2=%@", nowPage, [chooseArr objectAtIndex:nowChoose]];
-
-
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:
NSUTF8StringEncoding];
-
NSURL *url = [
NSURL URLWithString:urlString];
-
testRequest = [ASIHTTPRequest requestWithURL:url];
-
[testRequest setDelegate:
self];
-
[testRequest startAsynchronous];
-
#pragma mark - 加载数据完毕
-
- (
void)requestFinished:(ASIHTTPRequest *)request
我们只需要在这里解析数据, 使用数据即可。
-
//当以二进制读取返回内容时用这个方法
-
NSData *responseData = [request responseData];
-
NSString *responseString = [[
NSString alloc] initWithData:responseData encoding:
NSUTF8StringEncoding];
self.testDic = [responseString objectFromJSONString];
-
NSMutableDictionary *nowDic = [[
NSMutableDictionary alloc]init];
-
[nowDic setObject:[[array objectAtIndex:i]objectForKey:
@"image_url"] forKey:
@"image_url"];
-
[nowDic setObject:[[array objectAtIndex:i]objectForKey:
@"image_width"] forKey:
@"image_width"];
-
[nowDic setObject:[[array objectAtIndex:i]objectForKey:
@"image_height"] forKey:
@"image_height"];
-
[nowDic setObject:[[array objectAtIndex:i]objectForKey:
@"desc"] forKey:
@"desc"];
-
-
[picArray addObject:nowDic];
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
这是SDWebImage给我们提供的一个函数. 通过调用它, 我们可以实现异步下载和离线缓存。
-
UIImageView *imageView = [[
UIImageView alloc]initWithFrame:
CGRectMake(SPACE /
2 , SPACE /
2 , width, height)];
-
NSURL *url = [
NSURL URLWithString:imageInfo.thumbURL];
-
[imageView setImageWithURL:url placeholderImage:
nil];
-
imageView.backgroundColor = [
UIColor palePurpleColor];
-
[
self addSubview:imageView];
-
//长按
-
UILongPressGestureRecognizer *longRecognizer;
-
longRecognizer = [[
UILongPressGestureRecognizer alloc]initWithTarget:
self action:
@selector(handleSingleLongFrom:)];
-
[
self addGestureRecognizer:longRecognizer];
-
//从当前视图中删除
-
[testArr removeObject:data];
-
//刷新数据
-
__
weak picVC *blockSelf =
self;
-
[blockSelf.waterView refreshView:testArr];
-
[blockSelf.waterView.infiniteScrollingView stopAnimating];
-
-
//从沙盒中删除
-
//打开沙盒
-
NSArray *paths =
NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES);
-
NSString *documentsDirectory = [paths objectAtIndex:
0];
-
NSString * namePath = [documentsDirectory stringByAppendingPathComponent:[
NSString stringWithFormat:
@"savedPicInfo_%d.plist",nowChoose]];
-
NSMutableArray *picArray = [[
NSMutableArray alloc] initWithContentsOfFile:namePath];
-
-
for (
int i=
0; i<[picArray count]; i++)
-
{
-
if ([[[picArray objectAtIndex:i]objectForKey:
@"image_url"] isEqualToString:data.thumbURL])
-
{
-
[picArray removeObjectAtIndex:i];
-
break;
-
}
-
}
-
[picArray writeToFile:namePath atomically:
YES];
-
//单击, 显示大图
-
-(
void)showImage:(ImageInfo*)data
-
{
-
NSURL *url = [
NSURL URLWithString:data.thumbURL];
-
[clickImage setImageWithURL:url placeholderImage:
nil];
-
TGRImageViewController *viewController = [[TGRImageViewController alloc] initWithImage:clickImage.image setImageInfo:data];
-
viewController.transitioningDelegate =
self;
-
[
self presentViewController:viewController animated:
YES completion:
nil];
-
}
-
#pragma mark - UIViewControllerTransitioningDelegate methods
-
- (
id<
UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(
UIViewController *)presented presentingController:(
UIViewController *)presenting sourceController:(
UIViewController *)source
-
{
-
if ([presented isKindOfClass:TGRImageViewController.class]) {
-
return [[TGRImageZoomAnimationController alloc] initWithReferenceImageView:clickImage];
-
}
-
return
nil;
-
}
-
-
- (
id<
UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(
UIViewController *)dismissed {
-
if ([dismissed isKindOfClass:TGRImageViewController.class]) {
-
return [[TGRImageZoomAnimationController alloc] initWithReferenceImageView:clickImage];
-
}
-
return
nil;
-
}
-
#pragma mark - Private methods
-
-
- (
void)longPress:(
UITapGestureRecognizer *)tapGestureRecognizer
-
{
-
-
if(tapGestureRecognizer.state ==
UIGestureRecognizerStateBegan)
-
{
-
[
self popupActionSheet];
-
}
-
}
-
-
- (
IBAction)handleSingleTap:(
UITapGestureRecognizer *)tapGestureRecognizer {
-
[
self dismissViewControllerAnimated:
YES completion:
nil];
-
}
-
-
- (
IBAction)handleDoubleTap:(
UITapGestureRecognizer *)tapGestureRecognizer {
-
if (
self.scrollView.zoomScale ==
self.scrollView.minimumZoomScale) {
-
// Zoom in
-
CGPoint center = [tapGestureRecognizer locationInView:
self.scrollView];
-
CGSize size =
CGSizeMake(
self.scrollView.bounds.size.width /
self.scrollView.maximumZoomScale,
-
self.scrollView.bounds.size.height /
self.scrollView.maximumZoomScale);
-
CGRect rect =
CGRectMake(center.x - (size.width /
2.0), center.y - (size.height /
2.0), size.width, size.height);
-
[
self.scrollView zoomToRect:rect animated:
YES];
-
}
-
else {
-
// Zoom out
-
[
self.scrollView zoomToRect:
self.scrollView.bounds animated:
YES];
-
}
-
}
-
_transitionOptions= @[[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionFlipFromLeft],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionFlipFromRight],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionCurlUp],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionCurlDown],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionCrossDissolve],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionFlipFromTop],
-
[
NSNumber numberWithInteger:
UIViewAnimationCurveEaseIn],
-
[
NSNumber numberWithInteger:
UIViewAnimationCurveEaseOut],
-
[
NSNumber numberWithInteger:
UIViewAnimationCurveLinear],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionAllowAnimatedContent],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionOverrideInheritedCurve],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionFlipFromTop],
-
[
NSNumber numberWithInteger:
UIViewAnimationOptionTransitionFlipFromBottom]];
-
-(
void)reloadData {
-
-
if (!
self.dataSource) {
-
//exit if data source has not been set up yet
-
self.photoViews =
nil;
-
return;
-
}
-
-
NSInteger numberOfPhotos = [
self.dataSource numberOfPhotosInPhotoStackView:
self];
-
NSInteger topPhotoIndex = [
self indexOfTopPhoto];
// Keeping track of current photo's top index so that it remains on top if new photos are added
-
-
if(numberOfPhotos >
0) {
-
-
NSMutableArray *photoViewsMutable = [[
NSMutableArray alloc] initWithCapacity:numberOfPhotos];
-
UIImage *borderImage = [
self.borderImage resizableImageWithCapInsets:
UIEdgeInsetsMake(
self.borderWidth,
self.borderWidth,
self.borderWidth,
self.borderWidth)];
-
-
for (
NSUInteger index =
0; index < numberOfPhotos; index++) {
-
-
UIImage *image = [
self.dataSource photoStackView:
self photoForIndex:index];
-
CGSize imageSize = image.size;
-
if([
self.dataSource respondsToSelector:
@selector(photoStackView:photoSizeForIndex:)]){
-
imageSize = [
self.dataSource photoStackView:
self photoSizeForIndex:index];
-
}
-
UIImageView *photoImageView = [[
UIImageView alloc] initWithFrame:(
CGRect){
CGPointZero, imageSize}];
-
photoImageView.image = image;
-
UIView *view = [[
UIView alloc] initWithFrame:photoImageView.frame];
-
view.layer.rasterizationScale = [[
UIScreen mainScreen] scale];
-
view.layer.shouldRasterize =
YES;
// rasterize the view for faster drawing and smooth edges
-
-
if (
self.showBorder) {
-
-
// Add the background image
-
if (borderImage) {
-
// If there is a border image, we need to add a background image view, and add some padding around the photo for the border
-
-
CGRect photoFrame = photoImageView.frame;
-
photoFrame.origin =
CGPointMake(
self.borderWidth,
self.borderWidth);
-
photoImageView.frame = photoFrame;
-
-
view.frame =
CGRectMake(
0,
0, photoImageView.frame.size.width+(
self.borderWidth*
2), photoImageView.frame.size.height+(
self.borderWidth*
2));
-
UIImageView *backgroundImageView = [[
UIImageView alloc] initWithFrame:view.frame];
-
backgroundImageView.image = borderImage;
-
-
[view addSubview:backgroundImageView];
-
}
else {
-
// if there is no boarder image draw one with the CALayer
-
view.layer.borderWidth =
self.borderWidth;
-
view.layer.borderColor = [[
UIColor whiteColor]
CGColor];
-
view.layer.shadowOffset =
CGSizeMake(
0,
0);
-
view.layer.shadowOpacity =
0.5;
-
}
-
}
-
-
[view addSubview:photoImageView];
-
-
view.tag = index;
-
view.center =
CGPointMake(
CGRectGetMidX(
self.bounds),
CGRectGetMidY(
self.bounds));
-
-
[photoViewsMutable addObject:view];
-
-
}
-
-
// Photo views are added to subview in the photoView setter
-
self.photoViews = photoViewsMutable; photoViewsMutable =
nil;
-
[
self goToPhotoAtIndex:topPhotoIndex];
-
-
}
-
-
}
本文正在参加博客大赛。 如果觉得对你有所帮助, 还望帮忙投下票。 多谢。
投票链接: http://vote.blog.csdn.net/Article/Details?articleid=37825177 (投票按钮在最下方)