相册的实现
2015-08-21 16:14
295 查看
#import <UIKit/UIKit.h>
@class AblumView;
@protocol AblumViewDelegate <NSObject>
@optional
- (void)hiddenOrShow:(AblumView *)ablumView;
@end
@interface AblumView :
UIView <UIScrollViewDelegate>
{
UIScrollView *_scrollView;
UIImageView *_imgView;
}
@property (nonatomic,
assign) id <AblumViewDelegate> delegate;
@property (nonatomic,
copy) NSString *url;
@property (nonatomic,
readonly) UIScrollView *scrollView;
- (void)downloadImage;
@end
#import "AblumView.h"
#import "common.h"
@implementation AblumView
-(instancetype)initWithFrame:(CGRect)frame
{
self=[super
initWithFrame:frame];
if (self) {
_scrollView = [[UIScrollView
alloc] initWithFrame:CGRectMake(0, 0,
self.width,
self.height)];
_scrollView.minimumZoomScale = 1;
_scrollView.maximumZoomScale = 2.5;
_scrollView.showsHorizontalScrollIndicator =
NO;
_scrollView.showsVerticalScrollIndicator =
NO;
_scrollView.scrollsToTop =
NO;
_scrollView.delegate =
self;
_scrollView.backgroundColor = [UIColor
blackColor];
[self
addSubview:_scrollView];
_imgView = [[UIImageView
alloc] initWithFrame:_scrollView.frame];
_imgView.userInteractionEnabled =
YES;
_imgView.contentMode =
UIViewContentModeScaleAspectFit;
[_scrollView
addSubvi
1928e
ew:_imgView];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer
alloc] initWithTarget:self
action:@selector(zoomOutOrIn:)];
doubleTap.numberOfTapsRequired = 2;
[self
addGestureRecognizer:doubleTap];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer
alloc] initWithTarget:self
action:@selector(hiddenOrShow:)];
[self
addGestureRecognizer:singleTap];
//
双击时忽略掉单击事件
[singleTap
requireGestureRecognizerToFail:doubleTap];
}
return
self;
}
#pragma mark - Public Method
- (void)downloadImage
{
if (_imgView.image ==
nil) {
//
把图片异步请求下来
[_imgView
setImageWithURL:[NSURL
URLWithString:_url]];
}
}
#pragma mark - ScrollView Delegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return _imgView ;
}
#pragma mark - target Method
- (void)zoomOutOrIn:(UITapGestureRecognizer *)tap
{
//
获取到用户点击位置
CGPoint point = [tap
locationInView:_imgView];
// NSLog(@"%@", NSStringFromCGPoint(point));
if (_scrollView.zoomScale == 1) {
[_scrollView
zoomToRect:CGRectMake(point.x-40, point.y-40, 80, 80)
animated:YES];
}else {
[_scrollView
setZoomScale:1 animated:YES];
}
}
- (void)hiddenOrShow:(UITapGestureRecognizer *)tap
{
if ([self.delegate
respondsToSelector:@selector(hiddenOrShow:)]) {
[self.delegate
hiddenOrShow:self];
}
}
@end
#import <UIKit/UIKit.h>
#import "BaseViewController.h"
#import "AblumView.h"
@interface AblumViewController :
BaseViewController <AblumViewDelegate,
UIScrollViewDelegate>
{
@private
UIImageView *_navigationBar;
UIScrollView *_contentScrollView;
UILabel *_titleLabel;
NSArray *_imagesData;
}
@end
#import "AblumViewController.h"
#import "ImageModel.h"
#import "AblumView.h"
#import "MainViewController.h"
#import "ImageModel.h"
#import "WXNetworkService.h"
#import "common.h"
#define kScrollViewGap 15
@interface
AblumViewController ()
- (void)loadNavigationBar;
- (void)loadBaseScrollView;
- (void)loadTitleView;
- (void)requestData;
- (void)refreshUI;
- (void)downloadData:(NSInteger)i;
@end
@implementation AblumViewController
- (void)viewDidLoad {
[super
viewDidLoad];
[self
requestData];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//滑动做三项事情,第一把字改了,第二把上一个相册的图的比例还原了,第三个加载图片
#pragma mark - ViewController Life
- (void)loadView
{
[super
loadView];
//
创建滑动视图
[self
loadBaseScrollView];
//
自定义导航栏视图
[self
loadNavigationBar];
//
创建标题视图(底部视图)
[self
loadTitleView];
}
- (void)viewWillAppear:(BOOL)animated
{
[super
viewWillAppear:animated];
if (self.navigationController.viewControllers.count
== 2) {
[self.navigationController
setNavigationBarHidden:YES
animated:YES];
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super
viewWillDisappear:animated];
if (self.navigationController.viewControllers.count
== 1) {
[self.navigationController
setNavigationBarHidden:NO
animated:YES];
MainViewController *mainVC = (MainViewController *)self.tabBarController;
[mainVC showOrHiddenTabBarView:NO];
}
}
#pragma mark - Private Method
- (void)loadNavigationBar
{
_navigationBar = [[UIImageView
alloc] initWithFrame:CGRectMake(0, 0,
kDeviceWidth, 44)];
_navigationBar.userInteractionEnabled =
YES;
_navigationBar.image = [UIImage
imageNamed:@"nav_bg_all"];
[self.view
addSubview:_navigationBar];
UIButton *backButton = [UIButton
buttonWithType:UIButtonTypeCustom];
backButton.frame =
CGRectMake(2, 0, 44, 44);
[backButton setBackgroundImage:[UIImage
imageNamed:@"backItem"]
forState:UIControlStateNormal];
[backButton addTarget:self
action:@selector(backRootVC:)
forControlEvents:UIControlEventTouchUpInside];
[_navigationBar
addSubview:backButton];
UILabel *title = [[UILabel
alloc] initWithFrame:CGRectMake(60, 0, 200, 44)];
title.text =
@"电影图片";
title.textAlignment =
NSTextAlignmentCenter;
title.textColor = [UIColor
whiteColor];
title.backgroundColor = [UIColor
clearColor];
title.font = [UIFont
boldSystemFontOfSize:22];
[_navigationBar
addSubview:title];
}
- (void)loadBaseScrollView
{
_contentScrollView = [[UIScrollView
alloc] initWithFrame:CGRectMake(0, 0,
kDeviceWidth+kScrollViewGap,
kDeviceHeight-20)];
_contentScrollView.pagingEnabled =
YES;
_contentScrollView.delegate =
self;
_contentScrollView.tag =
INT_MAX;
_contentScrollView.showsHorizontalScrollIndicator =
NO;
[self.view
addSubview:_contentScrollView];
}
- (void)loadTitleView
{
_titleLabel = [[UILabel
alloc] initWithFrame:CGRectMake(0,
kDeviceHeight-49-20,
kDeviceWidth, 49)];
_titleLabel.textAlignment =
NSTextAlignmentCenter;
_titleLabel.backgroundColor = [UIColor
blackColor];
_titleLabel.textColor = [UIColor
whiteColor];
_titleLabel.font = [UIFont
boldSystemFontOfSize:16];
[self.view
addSubview:_titleLabel];
}
////////////////////////////////////////////////////////////////////////
//- (void)requestData
//{
// NSArray *data = [WXNetworkService newsImageData];
//
// _imagesData = [[NSMutableArray alloc] initWithCapacity:data.count];
// for (id dic in data) {
//
// ImageModel *imgModel = [[ImageModel alloc] initWithContent:dic];
// [_imagesData addObject:imgModel];
// }
//
// [self refreshUI];
//}
-(void)requestData
{
NSArray *data=[WXNetworkService
newsImageData];
_imagesData=[[NSArray
alloc]init];
_imagesData=[ImageModel
modelArrayWithDictArray:data];
[self
refreshUI];
}
- (void)refreshUI
{
//
设置滑动视图的内容大小
_contentScrollView.contentSize =
CGSizeMake((kDeviceWidth +
kScrollViewGap) *
_imagesData.count, 0);
//
设置第一个标题的内容
ImageModel *imageModel =
_imagesData[0];
_titleLabel.text = imageModel.title;
int x = 0;
for (int index = 0; index <
_imagesData.count; index++) {
// 取出数据
ImageModel *imageModel =
_imagesData[index];
// 创建视图
AblumView *ablumView = [[AblumView
alloc] initWithFrame:CGRectMake(0+x, 0,
kDeviceWidth,
kDeviceHeight-20)];
ablumView.tag = index;
if (index < 2) {
ablumView.url = imageModel.url1;
[ablumView
downloadImage];
}
ablumView.delegate =
self;
[_contentScrollView
addSubview:ablumView];
x += (kDeviceWidth +
kScrollViewGap);
}
}
- (void)downloadData:(NSInteger)i
{
AblumView *_ablumView = (AblumView *)[_contentScrollView
viewWithTag:i];
ImageModel *imageModel =
_imagesData[i];
_ablumView.url = imageModel.url1;
[_ablumView
downloadImage];
}
#pragma mark - Action Method
- (void)backRootVC:(UIButton *)button
{
[self.navigationController
popViewControllerAnimated:YES];
}
#pragma mark - ScrollView Delegate
static
int lastIndex = 0;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int index = scrollView.contentOffset.x / (kDeviceWidth+kScrollViewGap);
if (index >= _imagesData.count || index < 0) {
return;
}
//
设置标题
ImageModel *imageModel =
_imagesData[index];
_titleLabel.text = imageModel.title;
//
还原上一个视图比例
AblumView *ablumView = (AblumView *)[_contentScrollView
viewWithTag:lastIndex];
if (ablumView.scrollView.zoomScale >= 1 &&
lastIndex != index) {
ablumView.scrollView.zoomScale = 1;
}
if (index == 0) {
// ... noting 2张图片(1, 2)
for (int i = 0; i <= index+1; i++) {
// NSLog(@"before : %d", i);
}
}else
if (index == _imagesData.count-1) {
// 2张图片(最后一张和倒数第二章)
for (int i = index; i >= index-1; i--) {
NSLog(@"end :i : %d", i);
[self
downloadData:i];
}
}else {
// 3 4 5
for (int i = index+1; i >= index-1; i--) {
NSLog(@"middle : %d", i);
[self
downloadData:i];
}
}
lastIndex = index;
}
#pragma mark - AblumView Delegate
- (void)hiddenOrShow:(AblumView *)ablumView
{
[UIView
beginAnimations:nil
context:NULL];
[UIView
setAnimationDuration:0.35];
if (_navigationBar.alpha == 1 &&
_titleLabel.alpha == 1) {
_navigationBar.alpha = 0;
_titleLabel.alpha = 0;
}else {
_navigationBar.alpha = 1;
_titleLabel.alpha = 1;
}
[UIView
commitAnimations];
}
@end
@class AblumView;
@protocol AblumViewDelegate <NSObject>
@optional
- (void)hiddenOrShow:(AblumView *)ablumView;
@end
@interface AblumView :
UIView <UIScrollViewDelegate>
{
UIScrollView *_scrollView;
UIImageView *_imgView;
}
@property (nonatomic,
assign) id <AblumViewDelegate> delegate;
@property (nonatomic,
copy) NSString *url;
@property (nonatomic,
readonly) UIScrollView *scrollView;
- (void)downloadImage;
@end
#import "AblumView.h"
#import "common.h"
@implementation AblumView
-(instancetype)initWithFrame:(CGRect)frame
{
self=[super
initWithFrame:frame];
if (self) {
_scrollView = [[UIScrollView
alloc] initWithFrame:CGRectMake(0, 0,
self.width,
self.height)];
_scrollView.minimumZoomScale = 1;
_scrollView.maximumZoomScale = 2.5;
_scrollView.showsHorizontalScrollIndicator =
NO;
_scrollView.showsVerticalScrollIndicator =
NO;
_scrollView.scrollsToTop =
NO;
_scrollView.delegate =
self;
_scrollView.backgroundColor = [UIColor
blackColor];
[self
addSubview:_scrollView];
_imgView = [[UIImageView
alloc] initWithFrame:_scrollView.frame];
_imgView.userInteractionEnabled =
YES;
_imgView.contentMode =
UIViewContentModeScaleAspectFit;
[_scrollView
addSubvi
1928e
ew:_imgView];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer
alloc] initWithTarget:self
action:@selector(zoomOutOrIn:)];
doubleTap.numberOfTapsRequired = 2;
[self
addGestureRecognizer:doubleTap];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer
alloc] initWithTarget:self
action:@selector(hiddenOrShow:)];
[self
addGestureRecognizer:singleTap];
//
双击时忽略掉单击事件
[singleTap
requireGestureRecognizerToFail:doubleTap];
}
return
self;
}
#pragma mark - Public Method
- (void)downloadImage
{
if (_imgView.image ==
nil) {
//
把图片异步请求下来
[_imgView
setImageWithURL:[NSURL
URLWithString:_url]];
}
}
#pragma mark - ScrollView Delegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return _imgView ;
}
#pragma mark - target Method
- (void)zoomOutOrIn:(UITapGestureRecognizer *)tap
{
//
获取到用户点击位置
CGPoint point = [tap
locationInView:_imgView];
// NSLog(@"%@", NSStringFromCGPoint(point));
if (_scrollView.zoomScale == 1) {
[_scrollView
zoomToRect:CGRectMake(point.x-40, point.y-40, 80, 80)
animated:YES];
}else {
[_scrollView
setZoomScale:1 animated:YES];
}
}
- (void)hiddenOrShow:(UITapGestureRecognizer *)tap
{
if ([self.delegate
respondsToSelector:@selector(hiddenOrShow:)]) {
[self.delegate
hiddenOrShow:self];
}
}
@end
#import <UIKit/UIKit.h>
#import "BaseViewController.h"
#import "AblumView.h"
@interface AblumViewController :
BaseViewController <AblumViewDelegate,
UIScrollViewDelegate>
{
@private
UIImageView *_navigationBar;
UIScrollView *_contentScrollView;
UILabel *_titleLabel;
NSArray *_imagesData;
}
@end
#import "AblumViewController.h"
#import "ImageModel.h"
#import "AblumView.h"
#import "MainViewController.h"
#import "ImageModel.h"
#import "WXNetworkService.h"
#import "common.h"
#define kScrollViewGap 15
@interface
AblumViewController ()
- (void)loadNavigationBar;
- (void)loadBaseScrollView;
- (void)loadTitleView;
- (void)requestData;
- (void)refreshUI;
- (void)downloadData:(NSInteger)i;
@end
@implementation AblumViewController
- (void)viewDidLoad {
[super
viewDidLoad];
[self
requestData];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//滑动做三项事情,第一把字改了,第二把上一个相册的图的比例还原了,第三个加载图片
#pragma mark - ViewController Life
- (void)loadView
{
[super
loadView];
//
创建滑动视图
[self
loadBaseScrollView];
//
自定义导航栏视图
[self
loadNavigationBar];
//
创建标题视图(底部视图)
[self
loadTitleView];
}
- (void)viewWillAppear:(BOOL)animated
{
[super
viewWillAppear:animated];
if (self.navigationController.viewControllers.count
== 2) {
[self.navigationController
setNavigationBarHidden:YES
animated:YES];
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super
viewWillDisappear:animated];
if (self.navigationController.viewControllers.count
== 1) {
[self.navigationController
setNavigationBarHidden:NO
animated:YES];
MainViewController *mainVC = (MainViewController *)self.tabBarController;
[mainVC showOrHiddenTabBarView:NO];
}
}
#pragma mark - Private Method
- (void)loadNavigationBar
{
_navigationBar = [[UIImageView
alloc] initWithFrame:CGRectMake(0, 0,
kDeviceWidth, 44)];
_navigationBar.userInteractionEnabled =
YES;
_navigationBar.image = [UIImage
imageNamed:@"nav_bg_all"];
[self.view
addSubview:_navigationBar];
UIButton *backButton = [UIButton
buttonWithType:UIButtonTypeCustom];
backButton.frame =
CGRectMake(2, 0, 44, 44);
[backButton setBackgroundImage:[UIImage
imageNamed:@"backItem"]
forState:UIControlStateNormal];
[backButton addTarget:self
action:@selector(backRootVC:)
forControlEvents:UIControlEventTouchUpInside];
[_navigationBar
addSubview:backButton];
UILabel *title = [[UILabel
alloc] initWithFrame:CGRectMake(60, 0, 200, 44)];
title.text =
@"电影图片";
title.textAlignment =
NSTextAlignmentCenter;
title.textColor = [UIColor
whiteColor];
title.backgroundColor = [UIColor
clearColor];
title.font = [UIFont
boldSystemFontOfSize:22];
[_navigationBar
addSubview:title];
}
- (void)loadBaseScrollView
{
_contentScrollView = [[UIScrollView
alloc] initWithFrame:CGRectMake(0, 0,
kDeviceWidth+kScrollViewGap,
kDeviceHeight-20)];
_contentScrollView.pagingEnabled =
YES;
_contentScrollView.delegate =
self;
_contentScrollView.tag =
INT_MAX;
_contentScrollView.showsHorizontalScrollIndicator =
NO;
[self.view
addSubview:_contentScrollView];
}
- (void)loadTitleView
{
_titleLabel = [[UILabel
alloc] initWithFrame:CGRectMake(0,
kDeviceHeight-49-20,
kDeviceWidth, 49)];
_titleLabel.textAlignment =
NSTextAlignmentCenter;
_titleLabel.backgroundColor = [UIColor
blackColor];
_titleLabel.textColor = [UIColor
whiteColor];
_titleLabel.font = [UIFont
boldSystemFontOfSize:16];
[self.view
addSubview:_titleLabel];
}
////////////////////////////////////////////////////////////////////////
//- (void)requestData
//{
// NSArray *data = [WXNetworkService newsImageData];
//
// _imagesData = [[NSMutableArray alloc] initWithCapacity:data.count];
// for (id dic in data) {
//
// ImageModel *imgModel = [[ImageModel alloc] initWithContent:dic];
// [_imagesData addObject:imgModel];
// }
//
// [self refreshUI];
//}
-(void)requestData
{
NSArray *data=[WXNetworkService
newsImageData];
_imagesData=[[NSArray
alloc]init];
_imagesData=[ImageModel
modelArrayWithDictArray:data];
[self
refreshUI];
}
- (void)refreshUI
{
//
设置滑动视图的内容大小
_contentScrollView.contentSize =
CGSizeMake((kDeviceWidth +
kScrollViewGap) *
_imagesData.count, 0);
//
设置第一个标题的内容
ImageModel *imageModel =
_imagesData[0];
_titleLabel.text = imageModel.title;
int x = 0;
for (int index = 0; index <
_imagesData.count; index++) {
// 取出数据
ImageModel *imageModel =
_imagesData[index];
// 创建视图
AblumView *ablumView = [[AblumView
alloc] initWithFrame:CGRectMake(0+x, 0,
kDeviceWidth,
kDeviceHeight-20)];
ablumView.tag = index;
if (index < 2) {
ablumView.url = imageModel.url1;
[ablumView
downloadImage];
}
ablumView.delegate =
self;
[_contentScrollView
addSubview:ablumView];
x += (kDeviceWidth +
kScrollViewGap);
}
}
- (void)downloadData:(NSInteger)i
{
AblumView *_ablumView = (AblumView *)[_contentScrollView
viewWithTag:i];
ImageModel *imageModel =
_imagesData[i];
_ablumView.url = imageModel.url1;
[_ablumView
downloadImage];
}
#pragma mark - Action Method
- (void)backRootVC:(UIButton *)button
{
[self.navigationController
popViewControllerAnimated:YES];
}
#pragma mark - ScrollView Delegate
static
int lastIndex = 0;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int index = scrollView.contentOffset.x / (kDeviceWidth+kScrollViewGap);
if (index >= _imagesData.count || index < 0) {
return;
}
//
设置标题
ImageModel *imageModel =
_imagesData[index];
_titleLabel.text = imageModel.title;
//
还原上一个视图比例
AblumView *ablumView = (AblumView *)[_contentScrollView
viewWithTag:lastIndex];
if (ablumView.scrollView.zoomScale >= 1 &&
lastIndex != index) {
ablumView.scrollView.zoomScale = 1;
}
if (index == 0) {
// ... noting 2张图片(1, 2)
for (int i = 0; i <= index+1; i++) {
// NSLog(@"before : %d", i);
}
}else
if (index == _imagesData.count-1) {
// 2张图片(最后一张和倒数第二章)
for (int i = index; i >= index-1; i--) {
NSLog(@"end :i : %d", i);
[self
downloadData:i];
}
}else {
// 3 4 5
for (int i = index+1; i >= index-1; i--) {
NSLog(@"middle : %d", i);
[self
downloadData:i];
}
}
lastIndex = index;
}
#pragma mark - AblumView Delegate
- (void)hiddenOrShow:(AblumView *)ablumView
{
[UIView
beginAnimations:nil
context:NULL];
[UIView
setAnimationDuration:0.35];
if (_navigationBar.alpha == 1 &&
_titleLabel.alpha == 1) {
_navigationBar.alpha = 0;
_titleLabel.alpha = 0;
}else {
_navigationBar.alpha = 1;
_titleLabel.alpha = 1;
}
[UIView
commitAnimations];
}
@end
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- XML 与 JSON 优劣对比
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- newtonsoft.json解析天气数据出错解决方法
- vbs 解析json jsonp的方法
- C#实现将类的内容写成JSON格式字符串的方法
- jquery JSON的解析方式示例介绍
- c#版json数据解析示例分享
- ASP JSON类文件的使用方法
- C#实现对Json字符串处理实例
- C#实现Json转Unicode的方法
- php解析json数据实例
- PHP6 先修班 JSON实例代码
- 关于JSON以及JSON在PHP中的应用技巧
- .Net中的json操作类用法分析