你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開辟中應用UIScrollView完成圖片輪播和點擊加載

iOS開辟中應用UIScrollView完成圖片輪播和點擊加載

編輯:IOS開發綜合

UIScrollView控件完成圖片輪播

1、完成後果

完成圖片的主動輪播

2015121091504602.png (640×960)

2015121091528376.png (313×492)

2、完成代碼

storyboard中結構

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615460773.png (674×559)

代碼:

#import "YYViewController.h"

@interface YYViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollview;
/**
 *  頁碼
 */
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

@property (nonatomic, strong) NSTimer *timer;
@end


@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
   
//    圖片的寬
    CGFloat imageW = self.scrollview.frame.size.width;
//    CGFloat imageW = 300;
//    圖片高
    CGFloat imageH = self.scrollview.frame.size.height;
//    圖片的Y
    CGFloat imageY = 0;
//    圖片中數
    NSInteger totalCount = 5;
//   1.添加5張圖片
    for (int i = 0; i < totalCount; i++) {
        UIImageView *imageView = [[UIImageView alloc] init];
//        圖片X
        CGFloat imageX = i * imageW;
//        設置frame
        imageView.frame = CGRectMake(imageX, imageY, imageW, imageH);
//        設置圖片
        NSString *name = [NSString stringWithFormat:@"img_0%d", i + 1];
        imageView.image = [UIImage imageNamed:name];
//        隱蔽指導條
        self.scrollview.showsHorizontalScrollIndicator = NO;
       
        [self.scrollview addSubview:imageView];
    }
   
//    2.設置scrollview的轉動規模
    CGFloat contentW = totalCount *imageW;
    //不許可在垂直偏向長進行轉動
    self.scrollview.contentSize = CGSizeMake(contentW, 0);
   
//    3.設置分頁
    self.scrollview.pagingEnabled = YES;
   
//    4.監聽scrollview的轉動
    self.scrollview.delegate = self;
   
    [self addTimer];
}

- (void)nextImage
{
    int page = (int)self.pageControl.currentPage;
    if (page == 4) {
        page = 0;
    }else
    {
        page++;
    }
   
//  轉動scrollview
    CGFloat x = page * self.scrollview.frame.size.width;
    self.scrollview.contentOffset = CGPointMake(x, 0);
}

// scrollview轉動的時刻挪用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"轉動中");
//    盤算頁碼
//    頁碼 = (contentoffset.x + scrollView一半寬度)/scrollView寬度
    CGFloat scrollviewW =  scrollView.frame.size.width;
    CGFloat x = scrollView.contentOffset.x;
    int page = (x + scrollviewW / 2) /  scrollviewW;
    self.pageControl.currentPage = page;
}

// 開端拖拽的時刻挪用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
//    封閉准時器(留意點; 准時器一旦被封閉,沒法再開啟)
//    [self.timer invalidate];
    [self removeTimer];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
//    開啟准時器
    [self addTimer];
}

/**
 *  開啟准時器
 */
- (void)addTimer{
   
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
106 }
/**
 *  封閉准時器
 */
- (void)removeTimer
{
    [self.timer invalidate];
}
@end

提醒:以下兩個屬性曾經和storyboard中的控件停止了連線。

@property (weak, nonatomic) IBOutletUIScrollView *scrollview;

@property (weak, nonatomic) IBOutletUIPageControl *pageControl;

彌補:准時器NSTimer

   准時器 合適用來隔一段時光做一些距離比擬長的操作

 NSTimeInterval:多長多件操作一次

 target :操作誰

 selector : 要操作的辦法

 userInfo: 傳遞參數

 repeats: 能否反復

  self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];


在UItableview中完成加載更多功效
1、完成後果

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615460777.png (317×497)

點擊加載更多按鈕,湧現一個加載圖示,三秒鐘後添加兩條新的數據。

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615460765.png (640×960)

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615460710.png (314×499)

2、完成代碼和解釋

當在頁面(視圖部門)點擊加載更多按鈕的時刻,主頁面(主掌握器)會加載兩條數據出去。

視圖部門的按鈕被點擊的時刻,要讓主掌握器加載數據,刷新表格,2B青年會在視圖中增長一個主掌握器的屬性,經由過程這個屬性去挪用停止加載,但在開辟中平日經由過程署理形式來完成這個操作。

上面分離是兩種完成的代碼。

1、項目構造和解釋

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615460770.png (1162×576)

解釋:加載更多永久都放在這個tableview的最下端,是以這裡設置成了這個tableview的tableFooterView。

 self.tableview.tableFooterView=footerview;

在完成上經由過程xib來停止處置,斟酌到閣下的留白,和點擊後的要切換到加載按鈕和文字,要同時掌握圖標和文字,是以把加載圖標和文字提醒放在了一個view中以便掌握,這個xib曾經和YYfooterview.xib停止了聯系關系,經由過程這個類來掌握xib。

2、完成代碼

(1).渣滓代碼

數據模子部門

YYtg.h文件

//
//  YYtg.h
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Global.h"

@interface YYtgModel : NSObject
@property(nonatomic,copy)NSString *icon;
@property(nonatomic,copy)NSString *buyCount;
@property(nonatomic,copy)NSString *title;
@property(nonatomic,copy)NSString *price;

//對外接口
YYinitH(tg)
@end

YYtg.m文件

//
//  YYtg.m
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYtgModel.h"

@implementation YYtgModel
YYinitM(tg)
@end

留意:關於數據轉模子部門的結構辦法接口和完成代碼曾經經由過程自界說帶參數的宏來停止了封裝。

封裝代碼以下:

#ifndef _0____________Global_h
#define _0____________Global_h

/**
 *  自界說帶參數的宏
 */
#define     YYinitH(name)   -(instancetype)initWithDict:(NSDictionary *)dict;\
+(instancetype)name##WithDict:(NSDictionary *)dict;


#define     YYinitM(name)  -(instancetype)initWithDict:(NSDictionary *)dict\
{\
    if (self=[super init]) {\
        [self setValuesForKeysWithDictionary:dict];\
    }\
    return self;\
}\
\
+(instancetype)name##WithDict:(NSDictionary *)dict\
{\
    return [[self alloc]initWithDict:dict];\
}\

#endif

視圖部門

YYtgcell.h文件

//
//  YYtgcell.h
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "YYtgModel.h"

@interface YYtgcell : UITableViewCell
@property(nonatomic,strong)YYtgModel *yytg;

//把加載數據(應用xib創立cell的外部細節停止封裝)
+(instancetype)tgcellWithtableView:(UITableView *)tableView;
@end

YYtgcell.m文件

//
//  YYtgcell.m
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYtgcell.h"
//公有擴大
@interface YYtgcell()
@property (strong, nonatomic) IBOutlet UIImageView *img;
@property (strong, nonatomic) IBOutlet UILabel *titlelab;
@property (strong, nonatomic) IBOutlet UILabel *pricelab;
@property (strong, nonatomic) IBOutlet UILabel *buycountlab;
@end


@implementation YYtgcell

#pragma mark 重寫set辦法,完成數據的賦值操作
-(void)setYytg:(YYtgModel *)yytg
{
    _yytg=yytg;
    self.img.image=[UIImage imageNamed:yytg.icon];
    self.titlelab.text=yytg.title;
    self.pricelab.text=[NSString stringWithFormat:@"$%@",yytg.price];
    self.buycountlab.text=[NSString stringWithFormat:@"已有%@人購置",yytg.buyCount];
}

+(instancetype)tgcellWithtableView:(UITableView *)tableView
{
    static NSString *identifier= @"tg";
    YYtgcell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell==nil) {
        //若何讓創立的cell加個戳
        //關於加載的xib文件,可以到xib視圖的屬性選擇器中停止設置
        cell=[[[NSBundle mainBundle]loadNibNamed:@"tgcell" owner:nil options:nil]firstObject];
        NSLog(@"創立了一個cell");
    }
    return cell;
}

@end

YYfooterview.h文件

//
//  YYfooterview.h
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>
@class YYViewController;
@interface YYfooterview : UIView
@property(nonatomic,strong) YYViewController *controller;
@end

YYfooterview.m文件

//
//  YYtgcell.m
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYtgcell.h"
//公有擴大
@interface YYtgcell()
@property (strong, nonatomic) IBOutlet UIImageView *img;
@property (strong, nonatomic) IBOutlet UILabel *titlelab;
@property (strong, nonatomic) IBOutlet UILabel *pricelab;
@property (strong, nonatomic) IBOutlet UILabel *buycountlab;
@end


@implementation YYtgcell

#pragma mark 重寫set辦法,完成數據的賦值操作
-(void)setYytg:(YYtgModel *)yytg
{
    _yytg=yytg;
    self.img.image=[UIImage imageNamed:yytg.icon];
    self.titlelab.text=yytg.title;
    self.pricelab.text=[NSString stringWithFormat:@"$%@",yytg.price];
    self.buycountlab.text=[NSString stringWithFormat:@"已有%@人購置",yytg.buyCount];
}

+(instancetype)tgcellWithtableView:(UITableView *)tableView
{
    static NSString *identifier= @"tg";
    YYtgcell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell==nil) {
        //若何讓創立的cell加個戳
        //關於加載的xib文件,可以到xib視圖的屬性選擇器中停止設置
        cell=[[[NSBundle mainBundle]loadNibNamed:@"tgcell" owner:nil options:nil]firstObject];
        NSLog(@"創立了一個cell");
    }
    return cell;
}

@end

YYfooterview.h文件

//
//  YYfooterview.h
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>
@class YYViewController;
@interface YYfooterview : UIView
@property(nonatomic,strong) YYViewController *controller;
@end

YYfooterview.m文件

//
//  YYfooterview.m
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYfooterview.h"
#import "YYViewController.h"

@interface YYfooterview ()
@property (strong, nonatomic) IBOutlet UIActivityIndicatorView *loadingview;
@property (strong, nonatomic) IBOutlet UIButton *loadbtn;

@end


@implementation YYfooterview
- (IBAction)loadbtclick {
    NSLog(@"按鈕被點擊了");
    //隱蔽按鈕
    self.loadbtn.hidden=YES;
    //顯示菊花
    self.loadingview.hidden=NO;
   
#warning 模仿發送收集要求, 3秒以後隱蔽菊花
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 3.挪用掌握的加載數據辦法
        [self.controller LoadMore];
        // 4.隱蔽菊花視圖
        self.loadingview.hidden = YES;
        // 5.顯示按鈕
        self.loadbtn.hidden = NO;
    });
}

@end

主掌握器

YYViewController.h文件

//
//  YYViewController.h
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface YYViewController : UIViewController
//地下接口
//- (void)LoadMore;
@end

YYViewController.m文件

//
//  YYViewController.m
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYtgModel.h"
#import "YYtgcell.h"
#import "YYfooterview.h"

@interface YYViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableview;

@property(strong,nonatomic)NSMutableArray *tg;
@end


@implementation YYViewController

#pragma mark-加載數據辦法
-(void)LoadMore
{
    //創立模子
    YYtgModel *tgmodel=[[YYtgModel alloc]init];
    tgmodel.title=@"菜好上桌";
    tgmodel.icon=@"5ee372ff039073317a49af5442748071";
    tgmodel.buyCount=@"20";
    tgmodel.price=@"10000";
    //將模子添加到數組中
    [self.tg addObject:tgmodel];
   
    YYtgModel *tgmodelq=[[YYtgModel alloc]init];
    tgmodelq.title=@"菜好上桌1";
    tgmodelq.icon=@"5ee372ff039073317a49af5442748071";
    tgmodelq.buyCount=@"20";
    tgmodelq.price=@"10000";
   
    [self.tg addObject:tgmodelq];
    //刷新表格
    [self.tableview reloadData];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableview.rowHeight=80.f;
   
    //加載底部視圖
    //從xib中獲得數據
    UINib *nib=[UINib nibWithNibName:@"YYfooterview" bundle:nil];
    YYfooterview *footerview=[[nib instantiateWithOwner:nil options:nil] firstObject];
    self.tableview.tableFooterView=footerview;
    //設置掌握
    footerview.controller=self;
}
#pragma mark-  懶加載
-(NSArray *)tg
{
    if (_tg==nil) {
        NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"tgs.plist" ofType:nil];
        NSArray *temparray=[NSArray arrayWithContentsOfFile:fullpath];
       
        NSMutableArray *arrayM=[NSMutableArray arrayWithCapacity:temparray.count];
        for (NSDictionary *dict in temparray) {
            YYtgModel *tg=[YYtgModel tgWithDict:dict];
            [arrayM addObject:tg];
        }
        _tg=arrayM;
    }
    return _tg;
}

#pragma mark- xib創立cell數據處置

#pragma mark 若干組
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

#pragma mark若干行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.tg.count;
}

#pragma mark設置每組每行
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1.創立cell
    YYtgcell *cell=[YYtgcell tgcellWithTableView:tableView];
  
    //2.獲得以後行的模子,設置cell的數據
    YYtgModel *tg=self.tg[indexPath.row];
    cell.yytg=tg;
   
    //3.前往cell
    return cell;
}

#pragma mark- 隱蔽狀況欄
-(BOOL)prefeXmlRss/ target=_blank class=infotextkey>XmlRss/ target=_blank class=infotextkey>RsstatusBarHidden
{
    return YES;
}

@end

2.經由過程署理完成

當按鈕被點擊的時刻,視圖部門自己不干活,而是告訴它的署理(掌握器)完成接上去的操作。

該部門代碼在1的基本上對上面幾個文件停止了修正:

視圖部門:

YYfooterview.h文件

//
//  YYfooterview.h
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>
@class YYViewController ,YYfooterview;
//商定協定
@protocol YYfooterviewDelegate <NSObject>
-(void)footerviewLoadMore;
@end

@interface YYfooterview : UIView

//聲明一個id類型屬性,遵照了協定的“人”便可成為它的署理
@property(nonatomic,strong)id<YYfooterviewDelegate> delegate;
//@property(nonatomic,strong) YYViewController *controller;
@end

YYfooterview.m文件

//
//  YYfooterview.m
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYfooterview.h"
#import "YYViewController.h"

@interface YYfooterview ()
@property (strong, nonatomic) IBOutlet UIActivityIndicatorView *loadingview;
@property (strong, nonatomic) IBOutlet UIButton *loadbtn;

@end


@implementation YYfooterview
- (IBAction)loadbtclick {
    NSLog(@"按鈕被點擊了");
    //隱蔽按鈕
    self.loadbtn.hidden=YES;
    //顯示菊花
    self.loadingview.hidden=NO;
   
#warning 模仿發送收集要求, 3秒以後隱蔽菊花
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 3.挪用掌握的加載數據辦法
//        [self.controller LoadMore];
        //告訴署理
        [self.delegate footerviewLoadMore];
        // 4.隱蔽菊花視圖
        self.loadingview.hidden = YES;
        // 5.顯示按鈕
        self.loadbtn.hidden = NO;
    });
}

@end

主掌握器部門

YYViewController.h文件

//
//  YYViewController.h
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface YYViewController : UIViewController
//地下接口
//- (void)LoadMore;
@end

YYViewController.m文件

//
//  YYViewController.m
//  02-團購(應用xib和類完成數據展現)
//
//  Created by apple on 14-5-29.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYtgModel.h"
#import "YYtgcell.h"
#import "YYfooterview.h"

@interface YYViewController ()<UITableViewDataSource,UITableViewDelegate,YYfooterviewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableview;

@property(strong,nonatomic)NSMutableArray *tg;
@end


@implementation YYViewController

#pragma mark-加載數據辦法
-(void)footerviewLoadMore
{
    //創立模子
    YYtgModel *tgmodel=[[YYtgModel alloc]init];
    tgmodel.title=@"菜好上桌";
    tgmodel.icon=@"5ee372ff039073317a49af5442748071";
    tgmodel.buyCount=@"20";
    tgmodel.price=@"10000";
    //將模子添加到數組中
    [self.tg addObject:tgmodel];
   
    YYtgModel *tgmodelq=[[YYtgModel alloc]init];
    tgmodelq.title=@"菜好上桌1";
    tgmodelq.icon=@"5ee372ff039073317a49af5442748071";
    tgmodelq.buyCount=@"20";
    tgmodelq.price=@"10000";
   
    [self.tg addObject:tgmodelq];
    //刷新表格
    [self.tableview reloadData];
}
//-(void)LoadMore
//{
//    //創立模子
//    YYtgModel *tgmodel=[[YYtgModel alloc]init];
//    tgmodel.title=@"菜好上桌";
//    tgmodel.icon=@"5ee372ff039073317a49af5442748071";
//    tgmodel.buyCount=@"20";
//    tgmodel.price=@"10000";
//    //將模子添加到數組中
//    [self.tg addObject:tgmodel];
//   
//    YYtgModel *tgmodelq=[[YYtgModel alloc]init];
//    tgmodelq.title=@"菜好上桌1";
//    tgmodelq.icon=@"5ee372ff039073317a49af5442748071";
//    tgmodelq.buyCount=@"20";
//    tgmodelq.price=@"10000";
//   
//    [self.tg addObject:tgmodelq];
//    //刷新表格
//    [self.tableview reloadData];
//}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableview.rowHeight=80.f;
   
    //加載底部視圖
    //從xib中獲得數據
    UINib *nib=[UINib nibWithNibName:@"YYfooterview" bundle:nil];
    YYfooterview *footerview=[[nib instantiateWithOwner:nil options:nil] firstObject];
    self.tableview.tableFooterView=footerview;
    //設置掌握
//    footerview.controller=self;
    //設置署理
    footerview.delegate=self;
}
#pragma mark-  懶加載
-(NSArray *)tg
{
    if (_tg==nil) {
        NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"tgs.plist" ofType:nil];
        NSArray *temparray=[NSArray arrayWithContentsOfFile:fullpath];
       
        NSMutableArray *arrayM=[NSMutableArray arrayWithCapacity:temparray.count];
        for (NSDictionary *dict in temparray) {
            YYtgModel *tg=[YYtgModel tgWithDict:dict];
            [arrayM addObject:tg];
        }
        _tg=arrayM;
    }
    return _tg;
}

#pragma mark- xib創立cell數據處置

#pragma mark 若干組
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

#pragma mark若干行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.tg.count;
}

#pragma mark設置每組每行
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1.創立cell
    YYtgcell *cell=[YYtgcell tgcellWithTableView:tableView];
  
    //2.獲得以後行的模子,設置cell的數據
    YYtgModel *tg=self.tg[indexPath.row];
    cell.yytg=tg;
   
    //3.前往cell
    return cell;
}

#pragma mark- 隱蔽狀況欄
-(BOOL)prefeXmlRss/ target=_blank class=infotextkey>XmlRss/ target=_blank class=infotextkey>RsstatusBarHidden
{
    return YES;
}

@end

【iOS開辟中應用UIScrollView完成圖片輪播和點擊加載】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved