zoukankan      html  css  js  c++  java
  • ios项目 学习总结

    主要是一个图片展示的项目,现在才发现,项目前期的规划很重要,本文记录下项目开发中遇到的问题,

    1 动画的实现,在界面内到处飘荡的蒲公英,简单的使用了uiview的动画和时间函数NStimer实现的,代码大致如下:

          puGongYingTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(runPuGongYing) userInfo:nil repeats:NO];//时间函数
    bigPuGongYingGif =[[GifView alloc] initWithFrame:CGRectMake(-20, 50, 45,46) filePath:[[NSBundle mainBundle] pathForResource:@"pugongying" ofType:@"png"]];
    //上面的是GIf图片的实现开始的动画实现       
        [bgView addSubview:bigPuGongYingGif]; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:
    50]; int startX = round(random() % 900);//随机的路径 int endX = round(random() % 700); NSLog(@"startX===%d endX===%d",startX,endX); bigPuGongYingGif.frame=CGRectMake(1025, endX, 45, 46); [UIView setAnimationDidStopSelector:@selector(runPuGongYingAgain)];//循环调用 [UIView commitAnimations];
      

    2 在appdelegate里面页面的跳转方法,先设置为空,然后设置为需要的VC

       self.window.rootViewController=Nil;、、
            PingBao_PageViewController *pic_page=[[PingBao_PageViewController alloc]init];
            self.window.rootViewController=pic_page;

    3 app不让自动锁屏幕 [UIApplication sharedApplication].idleTimerDisabled=YES;
    4单例模式的使用非常有用,下面给一个例子,方面以后使用

    #import <Foundation/Foundation.h>
    
    @interface DataPist : NSObject{
        NSMutableDictionary *arryData;
    }
    @property(nonatomic,strong)NSMutableDictionary *arryData;
    @property(nonatomic,strong)NSArray *jianBaoArry;
    @property(nonatomic,strong)NSString *ipString;
    
    +(DataPist *) shared;
    +(id) allocWithZone:(NSZone *)zone;
    +(NSData*)stringToByte:(NSString*)string;
    +(void)showLoading;
    +(void)hideLoading;
    + (NSString *)dataFilePath ;
    @end
    
    #import "DataPist.h"
    
    @implementation DataPist
    @synthesize arryData,jianBaoArry,ipString;
    static DataPist *ShareDataPist = nil;
    
    +(DataPist *) shared{
        
        @synchronized(self)
        {
            if (ShareDataPist == nil)
            {
                ShareDataPist = [[self alloc] init] ;
                
            }
        }
        return ShareDataPist;
    }
    
    +(id) allocWithZone:(NSZone *)zone
    {
        @synchronized(self)
        {
            if (ShareDataPist == nil)
            {
                ShareDataPist = [super allocWithZone:zone];            
                return ShareDataPist;
            }
        }  
        return nil;
    }
    
    //转码函数16进止的图片转换的NSData
    +(NSData*)stringToByte:(NSString*)string
    {
        NSString *hexString=[[string uppercaseString] stringByReplacingOccurrencesOfString:@" " withString:@""];
        if ([hexString length]%2!=0) {
            return nil;
        }
        Byte tempbyt[1]={0};
        NSMutableData* bytes=[NSMutableData data];
        for(int i=0;i<[hexString length];i++)
        {
            unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)
            int int_ch1;
            if(hex_char1 >= '0' && hex_char1 <='9')
                int_ch1 = (hex_char1-48)*16;   //// 0 的Ascll - 48
            else if(hex_char1 >= 'A' && hex_char1 <='F')
                int_ch1 = (hex_char1-55)*16; //// A 的Ascll - 65
            else
                return nil;
            i++;
            
            unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)
            int int_ch2;
            if(hex_char2 >= '0' && hex_char2 <='9')
                int_ch2 = (hex_char2-48); //// 0 的Ascll - 48
            else if(hex_char2 >= 'A' && hex_char2 <='F')
                int_ch2 = hex_char2-55; //// A 的Ascll - 65
            else
                return nil;
            
            tempbyt[0] = int_ch1+int_ch2;  ///将转化后的数放入Byte数组里
            [bytes appendBytes:tempbyt length:1];
        }
        return bytes;
    }
    +(void)showLoading{
    //    [[UIApplication sharedApplication].windows objectAtIndex:0]
        
           [MBProgressHUD showHUDAddedTo:[[UIApplication sharedApplication].windows objectAtIndex:0] animated:YES];
    //    mb.labelText=@"正在加载";
    }
    +(void)hideLoading{
        [MBProgressHUD hideHUDForView:[[UIApplication sharedApplication].windows objectAtIndex:0] animated:YES];
    
    }
    + (NSString *)dataFilePath {
        //写入library
        NSString *path=[NSHomeDirectory() stringByAppendingPathComponent:@"Library"];
        
        NSString *pathNext = [NSString stringWithFormat:@"%@/Caches",path];
        NSString *fileNamepath=[pathNext stringByAppendingPathComponent:@"Image.plist"];
        return fileNamepath;
    }
    @end

    5  下载多个zip文件图片,然后解压,放入指定的目录,实现

    下载实现:

     //宏定义沙盒目录#define DocumentsDirectory [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject]
    -(void)download{
        mb.labelText=@"正在下载";
        // 初始化队列
        if (!networkQueue) {
            networkQueue = [[ASINetworkQueue alloc] init];
            // 设置最大并发数 默认为-1 无限制
            [networkQueue setMaxConcurrentOperationCount:-1];
        }
        // 重制队列
        [networkQueue cancelAllOperations];
        [networkQueue reset];
        // 设置队列的进度条
        [networkQueue setDownloadProgressDelegate:progressView];
        // 设置完成方法
        [networkQueue setRequestDidFailSelector:@selector(Failed:)];//一个文件下载失败执行
        [networkQueue setQueueDidFinishSelector:@selector(Succeed:)];//不管下载成功失败都会执行的
        [networkQueue setRequestDidFinishSelector:@selector(Finished:)];//一个成功就执行
        // 显示精确进度
        [networkQueue setShowAccurateProgress:YES];
        [networkQueue setDelegate:self];
        ASIHTTPRequest *request;
        //zip_names从服务器去的zipname地址
        for (int i=0; i<[zip_names count]; i++) {
            NSString *name=[zip_names objectAtIndex:i];
            NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/api/%@.zip",[DataPist shared].ipString,name]];
            request = [ASIHTTPRequest requestWithURL:url];
         [request setTemporaryFileDownloadPath:[DocumentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip.temp",[zip_names objectAtIndex:i]]]]; [request setDownloadDestinationPath:[DocumentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:
    @"%@.zip",[zip_names objectAtIndex:i]]]]; [request setAllowResumeForFileDownloads:YES]; [networkQueue addOperation:request]; } [networkQueue go]; } -(void)Succeed:(ASINetworkQueue *)request{ if (Flag != NO) { [self performSelector:@selector(changeloading) withObject:self afterDelay:0]; [self jieya]; } } -(void)Finished:(ASIHTTPRequest *)request{ } -(void)changeloading{ mb.labelText=@"正在初始化数据"; } -(void)Failed:(ASIHTTPRequest *)request{ Flag = NO;//一个文件下载失败的时候设置为no,将不会执行Succeed:(ASINetworkQueue *)request里面的解压方法 if (IsFail==NO) { [ MBProgressHUD hideHUDForView:self.view animated:YES]; UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"网络更新失败,请重新下载" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:Nil, nil]; [alert show]; IsFail=YES;变成yes后,他就只执行一次, } progressView.hidden=YES; [ MBProgressHUD hideHUDForView:self.view animated:YES]; }
    //IsFail=NO下载失败,为了不让重复出现下载失败的弹出框;
    //Flag = YES;作用是显示只有下载成功后才开始执行 Succeed:(ASINetworkQueue *)request里面的方法,这是他们的初始化值,
    //当失败后,又的从新开始他们的数据初始化,IsFail=no,Flag=yes
    //解压方法
    - (void)jieya{
       要用到zipArchive的类库
        ZipArchive *zip=[[ZipArchive alloc]init];
        for (int i = 0; i < zip_names.count; i++) {
            NSString *name = [NSString stringWithFormat:@"Documents/%@.zip",[zip_names objectAtIndex:i]];
            NSString *path=[NSHomeDirectory()stringByAppendingPathComponent:[NSString stringWithString:name]];
               NSLog(@"-----%@",path);
            
            NSString *unZipTo;
            NSString *rang=[zip_names objectAtIndex:i];
         // 这块是为了找到下载的zip是那种,然后分开设置放到不同的文件夹里,
            if (([rang rangeOfString:@"large"].location!=NSNotFound)) {
                
                unZipTo = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/bigImage"];
            }else{
                
                unZipTo = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
            }
            
            if ([zip UnzipOpenFile:path])
            {
                [zip UnzipFileTo:unZipTo overWrite:YES];
                [zip UnzipCloseFile];
            }
        }

        if ([[zip_names objectAtIndex:0] rangeOfString:@"small"].location!=NSNotFound||[[zip_names objectAtIndex:0] rangeOfString:@"publicimg"].location!=NSNotFound) {
            [self writer];
        }else{
          NSLog(@"大图不需要写入");
     
    }
    写入的方法,当时想的是哦把图片存到plist文件了,
    -(void)writer{
        //拿到应用程序沙盒里面的路径
    //    NSArray *paths = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];
        //读取存在沙盒里面的文件图片
        for (int i = 0; i < zip_names.count; i++) {
            if ([[zip_names objectAtIndex:i] isEqualToString:@"publicimg"] || [[zip_names objectAtIndex:i] isEqualToString:@"uppublicimg"]) {
                NSString *imgPath1=[NSHomeDirectory()stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@.json",[zip_names objectAtIndex:i]]];
                ////因为拿到的是个路径 把它加载成一个data对象
                NSData *data=[NSData dataWithContentsOfFile:imgPath1];
                NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:NULL];
                //判断登录是否正确
                //    NSString *str = [NSString stringWithFormat:@"%@",[weatherDic objectForKey:@"flag"]];
                //取出所有图片信息
                NSDictionary *season = [weatherDic objectForKey:@"season_img"];
                NSDictionary *season_line = [weatherDic objectForKey:@"line_season_img"];
    //            NSDictionary *report_img = [weatherDic objectForKey:@"report_img"];
                NSDictionary *screen_img = [weatherDic objectForKey:@"screen_img"];
                //    NSLog(@"%@,%@,%@,%@,%@",wirte,season,season_line,report_img,screen_img);
                //    NSDictionary *line_name = [NSDictionary alloc];
                //写入plist
                //    NSString *filePath = [self dataFilePath];
                
                if ([DataPist shared].arryData ==Nil) {判断arryData是否存在,不存在的话,从新创建文件路径
                    [DataPist shared].arryData = [[NSMutableDictionary alloc]init];
                }
                if ([[NSFileManager defaultManager] fileExistsAtPath:[self dataFilePath]]) {
                    [DataPist shared].arryData  = [[NSMutableDictionary alloc]initWithContentsOfFile:[self dataFilePath]];
                }
                NSFileManager* fm = [NSFileManager defaultManager];
                [fm createFileAtPath:[self dataFilePath] contents:nil attributes:nil];
               
                if (![[NSString stringWithFormat:@"%@",[season objectForKey:@"img_null"]] isEqualToString:@"0"]) {
                    [ [DataPist shared].arryData  setValuesForKeysWithDictionary:season];//这中setvalue的dic是直接写入的plsit里面添加的,他会自动写入key value,
                }
                if (![[NSString stringWithFormat:@"%@",[season_line objectForKey:@"img_null"]] isEqualToString:@"0"]) {
                    [ [DataPist shared].arryData  setValuesForKeysWithDictionary:season_line];
                }
    //            if (![[NSString stringWithFormat:@"%@",[report_img objectForKey:@"img_null"]] isEqualToString:@"0"]) {
    //                [ [DataPist shared].arryData  setValuesForKeysWithDictionary:report_img];
    //            }
                if (![[NSString stringWithFormat:@"%@",[screen_img objectForKey:@"img_null"]] isEqualToString:@"0"]) {
                    [ [DataPist shared].arryData  setValuesForKeysWithDictionary:screen_img];
                }
            }
            else if([[zip_names objectAtIndex:i] rangeOfString:@"small"].location!=NSNotFound){
                NSString *imgPath1=[NSHomeDirectory()stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@.json",[zip_names objectAtIndex:i]]];
                ////因为拿到的是个路径 把它加载成一个data对象
                NSData *data=[NSData dataWithContentsOfFile:imgPath1];
                NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:NULL];
                
                NSDictionary *img_name = [weatherDic objectForKey:@"line_img"];
                if (![[NSString stringWithFormat:@"%@",[img_name objectForKey:@"img_null"]] isEqualToString:@"0"]) {
                    [ [DataPist shared].arryData  setValuesForKeysWithDictionary:img_name];
                }
            }else{
                
            }
            
            
            [ [DataPist shared].arryData  setValue:line_img forKey:@"line_name"];
            //-------------------
            [ [DataPist shared].arryData  setValue:screen_id forKey:@"screen_id"];
            
            [ [DataPist shared].arryData  writeToFile:[self dataFilePath] atomically:YES];
            
        }
         isDown=@"1";
        
        [self downLoadAgain];
         [DataPist hideLoading];
        Choose_LineViewController *choose_Line = [[Choose_LineViewController alloc]init];
        [[NSUserDefaults standardUserDefaults] setObject:leftrightImageUrl forKey:@"leftOrRightUrl"];
        choose_Line.urlDic=leftrightImageUrl;
        [self presentViewController:choose_Line animated:YES completion:Nil];
    }
    //成功后的判断
    -(void)downLoadAgain{
        NSString *uuid = [[UIDevice currentDevice] uniqueIdentifier];
        NSString *post = [NSString stringWithFormat:@"%@/api/flag.php?uid=%@&status=%@",[DataPist shared].ipString,uuid,isDown];
        NSURLRequest *request111 = [NSURLRequest requestWithURL:[NSURL URLWithString:post]];
        NSData *response = [NSURLConnection sendSynchronousRequest:request111 returningResponse:nil error:nil];
    //    update_flg=@"1";
    //    [[NSUserDefaults standardUserDefaults]setObject:update_flg forKey:@"update_flg"];
        
    }



    上面主要用到了常规的方法,还有强大的BOOl变量,可以判断许多东西方法是否执行,以后记得使用,

    6:ipad上面的弹出视图:用下面这周方式,类似qq弹出设置界面的

     Setting_PageViewController *setting_page = [[Setting_PageViewController alloc]init];
        UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:setting_page];
        nav.modalPresentationStyle=UIModalPresentationFormSheet;
        [self presentViewController:nav animated:YES completion:NULL];

    如果弹出界面有多层的视图,可以使用这样push进去的,(用的是tableView的方法)

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        if (indexPath.section==0) {
            switch (indexPath.row) {
                case 0:
                {
                    ScreenSaveAnimation_ViewController *SV=[[ScreenSaveAnimation_ViewController alloc]init];
                    [self.navigationController pushViewController:SV animated:YES];
                }
                    break;
                case 1:{
                    ScreenSaveType_ViewController *ST=[[ScreenSaveType_ViewController alloc]init];
                    [self.navigationController pushViewController:ST animated:YES];
                    
                }break;
                    
                default:
                    break;
            }

    push进去的视图,返回的时候也可以返回 [self.navigationController popViewControllerAnimated:YES];

    在tableview中int n=[indexPath indexAtPosition:0];可以取到section的位置,主要用在tableview中的didSelectRowAtIndexPath方法里面,在点击此方式的时候,为了在列表的左边显示一个记号的话,可以在开始的时候在每个rows里都添加记号的按钮,先隐藏掉,设置tag,然后,在点击的时候通过tag让他显示出来,就是先把tableview上的view全部遍历一遍,都隐藏,然后找出你点击的view的tag,让他显示,别的也就都隐藏了,类似此类的代码

    -(void)nextTag:(NSIndexPath *)indexPath{
        
        UIImageView *image;
        
        int n=[indexPath indexAtPosition:0];//区分section
        if (n==0) {
            for (int i=500; i<540; i++) {//先全部循环隐藏掉,
                image=(UIImageView *)[self.view viewWithTag:i];
                [image setHidden:YES];
            }
            image=(UIImageView *)[self.view viewWithTag:indexPath.row+500];//某一个显示
            image.hidden=NO;
            
        }else if (n==1){
            
            for (int i=500; i<540; i++) {
                image=(UIImageView *)[self.view viewWithTag:i];
                [image setHidden:YES];
            }
            image=(UIImageView *)[self.view viewWithTag:indexPath.row+510];
            image.hidden=NO;
            
        }else if (n==2){
            
            for (int i=500; i<540; i++) {
                image=(UIImageView *)[self.view viewWithTag:i];
                [image setHidden:YES];
            }
            image=(UIImageView *)[self.view viewWithTag:indexPath.row+520];
            image.hidden=NO;
            
        }else if (n==3){
            
            for (int i=500; i<540; i++) {
                image=(UIImageView *)[self.view viewWithTag:i];
                [image setHidden:YES];
            }
            
            image=(UIImageView *)[self.view viewWithTag:indexPath.row+530];
            image.hidden=NO;
        }
        
    }

    7 用button显示九宫格的的方法,

    -(void)initImage:(int)number
    { 此方法主要用于现在在scrollview上分页加载显示图片的,
        int num = line_detailInfo.count - number*10;//判断line_detailInfo是总得图片数,
        //num11 判断行数
        int num11 = 0;
        //num22 判断列数
        int num22 = 0;
        
        if (num > 5) {
            num11 = 2;
        }else if(num <= 5 ){
            num11 = 1;
        }
        for (int M=0; M < num11; M++) {
            if (num >= 5) {
                num22 = 5;
            }else if(num < 5){
                num22 = num%5;
            }
            for (int i=0; i < num22; i++) {
                UIButton *btns = [UIButton buttonWithType:0];
    //            [btns setImage:[UIImage imageNamed:[NSString stringWithFormat:@"a_%d.png",i]] forState:UIControlStateNormal];
                NSString *str;
                if (M == 0) {
                   str  = [line_detailInfo objectAtIndex:i+number*10];
                }else if (M == 1){
                    str  = [line_detailInfo objectAtIndex:i+number*10+5];
                }
                
                NSString *img_data = [NSString stringWithFormat:@"%@",[[DataPist shared].arryData objectForKey:[NSString stringWithFormat:@"s%@",str]]];
                [btns setImage:[UIImage imageWithData:[DataPist stringToByte:img_data]] forState:UIControlStateNormal];//显示图片
                if (M == 0) {
                    btns.tag = i+number*10+100;
                }else if (M == 1){
                    btns.tag = i+number*10+5+100;
                }
                
                [btns addTarget:self action:@selector(goNext:) forControlEvents:UIControlEventTouchUpInside];
                btns.frame = CGRectMake(1024*number+99+i*130+i*45,M*230+41*M+70, 130,230);
                [scroll addSubview:btns];
            }
            num = num - 5;
        }
    }

    下面的方法主要显示的在scrollview上面当加载到下一页的时候,当你放回的时候不用再加载

    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
      int  n=scrollView.contentOffset.x/1024;
        if (n >= scor) {
            scor = n;
            [self initImage:n];
        }
    }

    用scrollview显示多张 图片,类似于图片浏览器

      scroll=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 82, 1024, 630)];
        scroll.backgroundColor=[UIColor clearColor];
        scroll.showsVerticalScrollIndicator=NO;
        scroll.pagingEnabled=YES;
        scroll.delegate=self;
        scroll.showsVerticalScrollIndicator = FALSE;
        scroll.showsHorizontalScrollIndicator = FALSE;
        [self.view addSubview:scroll];底层的scrollview用于滑动和分页用的
      
    //这MRZoomScrollView主要用与显示图片和放大图片的
    for (int i = 0; i < imageArrys.count; i++) { zoomScrollView = [[MRZoomScrollView alloc]init]; CGRect frame = scroll.frame; zoomScrollView.maximumZoomScale=2; zoomScrollView.minimumZoomScale=1; zoomScrollView.tag=2000+i; zoomScrollView.showsVerticalScrollIndicator = NO; zoomScrollView.showsHorizontalScrollIndicator=NO; // zoomScrollView.backgroundColor=[UIColor grayColor]; frame.origin.x = frame.size.width * i; frame.origin.y = 0; zoomScrollView.frame = frame; [scroll addSubview:zoomScrollView]; } scroll.contentSize=CGSizeMake(1024*imageArrys.count, 768);设置图片共有多少张 [scroll setContentOffset:CGPointMake(1024*currentNum, 0) animated:YES];//设置点击小图进入大图的时候scroll停留在那个位置。

    MRZoomScrollView自定义的类显示图片的scrollview
    @interface MRZoomScrollView : UIScrollView <UIScrollViewDelegate>
    {
        UIImageView *imageView;
    }

    @property (nonatomic, retain) UIImageView *imageView;


    @end

    #import "MRZoomScrollView.h"

    #define MRScreenWidth      CGRectGetWidth([UIScreen mainScreen].applicationFrame)
    #define MRScreenHeight     CGRectGetHeight([UIScreen mainScreen].applicationFrame)

    @interface MRZoomScrollView (Utility)

    - (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center;

    @end

    @implementation MRZoomScrollView

    @synthesize imageView;

    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            
            self.delegate = self;
            self.frame = CGRectMake(0, 0, MRScreenWidth, MRScreenHeight);
            
            [self initImageView];
        }
        return self;
    }

    - (void)initImageView
    {
        imageView = [[UIImageView alloc]init];
        
        // The imageView can be zoomed largest size
        imageView.frame = CGRectMake(224, 0, 576, 768);
        imageView.userInteractionEnabled = YES;
        [self addSubview:imageView];
       }

    #pragma mark - Zoom methods

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView
    {
        NSLog(@"------%@",NSStringFromCGSize(scrollView.contentSize));

        CGFloat offsetX = (scrollView.bounds.size.width > scrollView.contentSize.width)?
        (scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5 : 0.0;
        CGFloat offsetY = (scrollView.bounds.size.height > scrollView.contentSize.height)?
        (scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5 : 0.0;
        //    if (YES) {
        imageView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX,
                                   scrollView.contentSize.height * 0.5 + offsetY);

    }

    #pragma mark - UIScrollViewDelegate

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return imageView;
    }

    #pragma mark - View cycle

    @end

    主要用于显示党scrollview滑动超过一屏时才执行的方法,
    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
        if (scrollView.contentOffset.x>1024*n||scrollView.contentOffset.x<=1024*(n-1)) {//判断是否滑动一屏
            n=scrollView.contentOffset.x/1024;
            [self initImage:n];
        }
    }

    苹果自带的简单的网络请求方法 并且解析数据

    -(void)getInfoImage{
        NSString *urlString = [NSString stringWithFormat:@"%@/api/model_style.php?img_name=%@",[DataPist shared].ipString,[imageArrys objectAtIndex:tags]];
        
        NSURLResponse *urlResponce=nil;
        NSError *error=nil;
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
        NSData *Data=[NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponce error:&error];
        if (error) {
            [DataPist hideLoading];
            UIAlertView *alter=[[UIAlertView alloc]initWithTitle:@"提示" message:@"当前网络不可用,请稍后再试" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [alter show];
            return;
        }
        
        NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:Data options:NSJSONReadingMutableLeaves error:nil];

    还有当滑动的时候清除一些控件的值,为了防止重叠,让他从新显示,如果用viewwithtag比较麻烦的话,可以使用简单的把需要从新赋值的控件放到一个view上面,然后通过移出view,新建view从新赋值,

    8:如果客户端需要查询图片分类的方法。一般的情况是需要数据库的支持,但是为了方便的话,可以点击按钮,像服务器短发请求,通过服务器查询后返回需要的图片的显示,然后客户端接受图片,然后在沙盒里面查询,这样还快,比较简单,显示沙盒里面的图片的简单的方法如下

      NSString *name=[NSString stringWithFormat:@"%@",[imageArrys objectAtIndex:tags]];图片名
        NSString *ss=[NSString stringWithFormat:@"Documents/bigImage/%@",name];
        NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",ss]];图片路径
        NSString *fileName=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];/加载图片,转为字符串
        NSString *imageNames=[fileName stringByReplacingOccurrencesOfString:@"-" withString:@"1"];//解密加密的图片字符串

    9 视频的加载用到的是AVQueuePlayer,简单的代码如下

    //初始化播放器组件
    -(void)initPlayer
    {
        [arryItems removeAllObjects];
        
        for (int i = 0; i < 34; i++) {
            [arryMp3Name addObject:[NSString stringWithFormat:@"序列 %@",[arryImages objectAtIndex:i]]];
        }    for (NSString *text in arryMp3Name) {
            NSURL *playerFileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:text ofType:@"mp4"]];
            AVPlayerItem *item=[AVPlayerItem playerItemWithURL:playerFileURL];
            [arryItems  addObject:item];
        }
    //    NSLog(@"arryItems==%d",arryItems.count);
        //添加播放下首歌的通知
        for (int songPointer = 0; songPointer < [arryItems count]; songPointer++) {
            [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(songEnded:)
                                                         name:AVPlayerItemDidPlayToEndTimeNotification
                                                       object:[arryItems objectAtIndex:songPointer]];
        }
        
        queuePlayer = [AVQueuePlayer queuePlayerWithItems:arryItems];
        playLayer = [AVPlayerLayer playerLayerWithPlayer:queuePlayer];
        playLayer.frame = CGRectMake(0, 82, 1024, 576);
        [self.view.layer addSublayer:playLayer];
        [queuePlayer play];
        
        playerView=[[UIView alloc]initWithFrame:CGRectMake(0,90, 1024, 576)];
        playerView.backgroundColor=[UIColor clearColor];
        playerView.userInteractionEnabled=YES;
        [self.view addSubview:playerView];
        
    }
    -(void)songEnded:(NSNotification *)notification{
    //    NSLog(@"---%@",notification.object);
    //    NSLog(@"--%d",n);
    //    NSLog(@"-----------------------%d",littletag);
        if (Flag == YES) {
            n = littletag;
            Flag = NO;
        }
        //动画实现添加蒙板
        [UIView beginAnimations:@"Curl"context:nil];//动画开始
        [UIView setAnimationDuration:0.75];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
        [(UIButton *)[self.view viewWithTag:n+1+1000] setAlpha:1];//主要是视频下面的饿缩略图的显示随着视频的播放显示
        [(UIButton *)[self.view viewWithTag:n+1000] setAlpha:0.2];
        [UIView commitAnimations];
        
        n++;
        //当n=34,播放到最后一个的时候,重新初始化播放器
        if (n==34) {
            n=0;
            [(UIButton *)[self.view viewWithTag:n+1000] setAlpha:1];
            [self initPlayer];
             [scoll setContentOffset:CGPointMake(0,scoll.contentOffset.y) animated:YES];
        }
        if(n>=10&&n<27){
            [scoll setContentOffset:CGPointMake(scoll.contentOffset.x+90,scoll.contentOffset.y) animated:YES];
        }
        
    }
    //返回到别的页面,要注销所有通知
    //当返回上级时移除所有通知
    - (void)releaseQueuePlayer
    {
        n=0;
        for (int songPointer = 0; songPointer < [arryItems count]; songPointer++) {
            [[NSNotificationCenter defaultCenter] removeObserver:self
                                                         name:AVPlayerItemDidPlayToEndTimeNotification
                                                       object:[arryItems objectAtIndex:songPointer]];
        }
         
        [queuePlayer removeAllItems];
        [arryItems removeAllObjects];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"startMovie" object:nil];
        [queuePlayer pause];   
    }
    、、点击下面某个缩略图,播放某个视频,然后接着下面的后面的继续播放
    //返回到到播放页面的方法
    -(void)replayMovie:(NSNotification *)tag
    {
    //    NSLog(@"----%@",tag.object);
        [queuePlayer removeAllItems];
    //    NSLog(@"***************%d",[tag.object intValue]);
        littletag=[tag.object intValue];
        for (int i = littletag; i <arryItems.count; i++) {
            AVPlayerItem* obj = [arryItems objectAtIndex:i];
            if ([queuePlayer canInsertItem:obj afterItem:nil]) {
                [obj seekToTime:kCMTimeZero];
                [queuePlayer insertItem:obj afterItem:nil];
            }
        }
        for (int i=0; i<34; i++) {
            [(UIButton *)[self.view viewWithTag:1000+i]setAlpha:0.2];
        }
        [(UIButton *)[self.view viewWithTag:littletag+1000]setAlpha:1];
        [queuePlayer play];
    //    if(littletag>=10){
    //        [scoll setContentOffset:CGPointMake(scoll.contentOffset.x+90,scoll.contentOffset.y) animated:YES];
    //    }
    }

    上面就是项目中学到的东西,希望以后能注意,铭记

  • 相关阅读:
    Vue:对象更改检测注意事项
    Vue实现简易留言板
    CSS实现三级菜单[转]
    Vue 侦听属性
    Vue-列表渲染 非变异方法
    MYSQL/HIVESQL笔试题(七):HIVESQL(七)
    leetcode算法题基础(四十九) 树BFS
    数据结构基础(八)图Graph
    数据结构基础(七)优先队列 PriorityQueue, 堆Heap
    数据结构基础(六)树
  • 原文地址:https://www.cnblogs.com/zhangsongbai/p/3177895.html
Copyright © 2011-2022 走看看