• IOS开发基础知识--碎片14


    1:ZIP文件压缩跟解压,使用ZipArchive

    创建/添加一个zip包
    
    ZipArchive* zipFile = [[ZipArchive alloc] init];
    
    //次数得zipfilename需要一个完整得路径,例如***/Documents/demo.zip
    
    [zipFile CreateZipFile2:@"zipfilename"]; 
    
    //有两种可选得方式进行创建压缩包,带密码和不带密码的
    
    [[zipFile CreateZipFile2:@"zipfilename" Password:@"your password"];
    
    //接下来就是将需要压缩的文件添加到这个压缩包中
    
    //这里第一个参数需要完整的路径,例如:***/Documents/a.txt  newname是指文件在压缩包中的名字,不需要路径,只是一个名称
    
    [zipFile addFileToZip:@"fullpath of the file" newname:@"new name of the file without path"];
    
    //如果需要将多个文件进行压缩,即压缩文件夹,重复addFileToZip方法即可
    
    [zipFile CloseZipFile2];
     
    
    解压zip包:
    
    ZipArchive* zipFile = [[ZipArchive alloc] init];
    
    [zipFile UnzipOpenFile:@"zip file name"]; 
    
    //同样,对应的就有两种打开zip包的方式,带密码和不带密码
    
    [zipFile UnzipOpenFile:@"zip file name" Password:@"password" ];
    
    //压缩包释放到的位置,需要一个完整路径 
    
    [zipFile UnzipFileTo:@"output path" overwrite:YES];
    
    [zipFile UnzipCloseFile];
    
    [zipFile release];
    
    //记得释放
    1. 压缩:ZipArchive可以压缩多个文件,只需要把文件一一addFileToZip即可.
    
    ZipArchive* zip = [[ZipArchive alloc] init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentpath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    NSString* l_zipfile = [documentpath stringByAppendingString:@"/test.zip"] ;
     
    NSString* image1 = [documentpath stringByAppendingString:@"/image1.jpg"] ;
    NSString* image2 = [documentpath stringByAppendingString:@"/image2.jpg"] ;       
     
    BOOL ret = [zip CreateZipFile2:l_zipfile];
    ret = [zip addFileToZip:image1 newname:@"image1.jpg"];
    ret = [zip addFileToZip:image2 newname:@"image2.jpg"];
    if( ![zip CloseZipFile2] )
      {
         l_zipfile = @"";
      }
     
    
    2. 解压缩:
    
    ZipArchive* zip = [[ZipArchive alloc] init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentpath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;  //路径地址要注意
     
    NSString* l_zipfile = [documentpath stringByAppendingString:@"/test.zip"] ;
    NSString* unzipto = [documentpath stringByAppendingString:@"/test"] ;
    if( [zip UnzipOpenFile:l_zipfile] )
     {
       BOOL ret = [zip UnzipFileTo:unzipto overWrite:YES];
       if( NO==ret )
       {
       }
       [zip UnzipCloseFile];
     }

    2:UITapGestureRecognizer传值

    UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
    
        imageView.image=[UIImageimageNamed:@"filter_laozhaopian_a.png"];
    
        imageView.tag = 10000;  //可以通过这样来给下边的点击事件传值
    
        imageView.userInteractionEnabled = YES;
    
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(UesrClicked:)];
    
        [imageView addGestureRecognizer:singleTap];
    
        [self.view addSubview:imageView];
    
    
    - (void)UesrClicked:(UITapGestureRecognizer *)recognizer
    {
       NSLog(@"%d",(recognizer.view.tag - 1000));
    } 

     3:自定义self.navigationItem.titleView视图

    UIView *titleView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, KTitleViewHeight)];
        
        //最新定义左边的按键
        UIButton *leftItemButton=[UIButton buttonWithType:UIButtonTypeCustom];
        leftItemButton.frame=CGRectMake(0, 0, KLeftItemButtonWidth, KLeftItemButtonHeight);
        [leftItemButton setBackgroundImage:[UIImage imageNamed:@"mapMarkNormal"] forState:UIControlStateNormal];
        [leftItemButton setBackgroundImage:[UIImage imageNamed:@"mapMarkSelected"] forState:UIControlStateHighlighted];
        [leftItemButton addTarget:self action:@selector(leftButtonAction) forControlEvents:UIControlEventTouchUpInside];
        [titleView addSubview:leftItemButton];
        [leftItemButton mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(titleView);
            make.left.equalTo(titleView.mas_left).with.offset(5);
            make.size.equalTo(CGSizeMake(KLeftItemButtonWidth, KLeftItemButtonHeight));
        }];
        
        UILabel *titleLabel=[UILabel new];
        titleLabel.textAlignment=NSTextAlignmentCenter;
        titleLabel.font=[UIFont systemFontOfSize:14];
        titleLabel.text=@"厦山中华公园广场";
        [titleView addSubview:titleLabel];
        [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(titleView);
            make.left.equalTo(titleView.mas_left).with.offset((SCREEN_WIDTH-KTitleViewTitleWidte-10)/2);
        }];
        
        UIButton *downButton=[UIButton new];
        [downButton setImage:[UIImage imageNamed:@"FileDownload"] forState:UIControlStateNormal];
        [titleView addSubview:downButton];
        [downButton mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.equalTo(titleView.mas_right).with.offset(-2);
            make.centerY.equalTo(titleView);
            make.size.equalTo(CGSizeMake(KTitleViewButtonWidth, KTitleViewButtonHeight));
        }];
        
        UILabel *proLabel=[UILabel new];
        proLabel.font=[UIFont systemFontOfSize:10];
        proLabel.textColor=[UIColor colorWithHexString:KWitTourism_AppTextColor];
        proLabel.textAlignment=NSTextAlignmentRight;
        proLabel.text=@"正在下载";
        [titleView addSubview:proLabel];
        
        [proLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.equalTo(downButton.mas_left).with.offset(-5);
            make.centerY.equalTo(titleView);
            make.size.equalTo(CGSizeMake(KTitleViewLabelWidth, KTitleViewLabelHeight));
        }];
        
        self.navigationItem.titleView=titleView;

    4:实现无限滚动的uiscrollview

    对滚动的图片数组头尾各增加一张,头则在其前面增加一张尾部的,尾部则插入一张第一张;并在滚动事件中进行处理,改变其位置;主体代码如下(若不自写也可以找相应插件,已封装):
    
    /**
     *  @author wujunyang, 15-06-05 13:06:12
     *
     *  @brief  头部滚动视图布局
     */
    -(void)setupScrollView
    {
        int imgCount=self.imgdatalist.count;
        
        //如果没有值时 用一张默认的图片替换显示
        if (imgCount==0) {
            UIImageView *featureImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"thirdEmpty"]];
            featureImageView.frame=self.headerImageView.frame;
            [self.headerImageView addSubview:featureImageView];
        }
        else{
            //实际的图片个数
            _actualImgNum=self.imgdatalist.count;
            //为实现无限滚动 首先在第一个前面插入一个元素 此元素为最后一个
            [self.imgdatalist insertObject:[self.imgdatalist objectAtIndex:([self.imgdatalist count]-1)] atIndex:0];
            //在第后一个增加一个原先的第一个 由于上面已被插入一个值 所以原先的第一个变成第二个 所以此处为1
            [self.imgdatalist addObject:[self.imgdatalist objectAtIndex:1]];
            //增加后的个数 用于处理定义滚动视图内容的总宽度
            int imagDataListCount=self.imgdatalist.count;
    
            _scrollView=[[UIScrollView alloc]init];
            _scrollView.frame=self.headerImageView.frame;
            
            for (int i=0; i<self.imgdatalist.count; i++) {
                AroundImgBean* aroundimgbean=[self.imgdatalist objectAtIndex:i];
                // 获取图片
                NSString *featureImageName = aroundimgbean.aroundimgurl;
                UIImageView *featureImageView = [[UIImageView alloc] init];
                [featureImageView sd_setImageWithURL:[NSURL URLWithString:featureImageName] placeholderImage:[UIImage imageNamed:@"thirdEmpty"]];
                
                // 设置图片尺寸位置
                CGFloat featureWidth = SCREEN_WIDTH;
                CGFloat featureHeight = self.headerImageView.frame.size.height;
                CGFloat featureX = SCREEN_WIDTH * i;
                CGFloat featureY = 0;
                featureImageView.frame = CGRectMake(featureX, featureY, featureWidth, featureHeight);
                [_scrollView addSubview:featureImageView];
            }
            
            // 设置scrollView功能属性
            _scrollView.userInteractionEnabled = YES;
            _scrollView.bounces=NO;
            _scrollView.scrollEnabled = YES; // 支持滚动
            _scrollView.contentSize = CGSizeMake(self.headerImageView.frame.size.width * imagDataListCount, 0); // 只需要水平滚动
            _scrollView.pagingEnabled = YES; // 支持分页
            _scrollView.showsHorizontalScrollIndicator = NO; // 隐藏水平滚动条
            
            // 设置代理
            _scrollView.delegate = self;
            
            // 添加
            [self.headerImageView addSubview:_scrollView];
        }
    }
    
    
    //滚动事件
    - (void)scrollViewDidScroll:(UIScrollView *)myscrollView {
        if ([myscrollView isEqual:_scrollView]) {
        // 四舍五入,让图片滚动超过中线的时候改变页码
        if (self.imgdatalist.count>0) {
            CGFloat pageWidth = _scrollView.frame.size.width;
            int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
            _currentPageIndex=page;
    
            //当前页数要是没有超过实际的值时
            if (_currentPageIndex<_actualImgNum) {
                _imageCount=[NSString stringWithFormat:@"%d/%d",_currentPageIndex+1,_actualImgNum];
            }
            else
            {
                _imageCount=[NSString stringWithFormat:@"%d/%d",1,_actualImgNum];
            }
            
            self.imageLabel.text=_imageCount;
        }
        else
        {
            _imageCountView.hidden=YES;
            _imageLabel.hidden=YES;
        }
        }
    }
    
    
    /**
     *  @author wujunyang, 15-06-05 11:06:06
     *
     *  @brief  滚动事件处理 无限滚动 修改滚动的当前位置
     *  @param myscrollView <#myscrollView description#>
     */
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)myscrollView
    {
        if ([myscrollView isEqual:_scrollView]) {
            if (_currentPageIndex==0) {
                
                [_scrollView setContentOffset:CGPointMake(([self.imgdatalist count]-2)*myscrollView.frame.size.width, 0)];
            }
            if (_currentPageIndex==([self.imgdatalist count]-1)) {
                
                [_scrollView setContentOffset:CGPointMake(myscrollView.frame.size.width, 0)];
            }
        }
    }

     5:IOS开发实现歌词自动滚动功能一种实现方式

     _timer = [NSTimer scheduledTimerWithTimeInterval:0.09f target:self selector:@selector(rollLyc) userInfo:nil repeats:YES];
    
    - (void)rollLyc
    {
        CGFloat currentTime = _audio.currentTime;
        CGFloat lycTime = [_lycList[currentLine + 1][@"time"] floatValue];//_lycList是存储有每句歌词和对应的时间的字典集合  currentLine设置为成员变量,在ViewDidLoad中初始为0
        
        NSLog(@"%f --- %f ",currentTime,lycTime);
        
        if (currentTime >= lycTime) {
            currentLine = currentLine + 1;
        }
        NSIndexPath *indexpath = [NSIndexPath indexPathForRow:currentLine inSection:0];
        [self.tableView selectRowAtIndexPath:indexpath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
    }

    6:iOS 从url中获取文件名以及后缀

    //这里有一个模拟器沙盒路径(完整路径)
    
    NSString* index=@"/Users/junzoo/Library/Application Support/iPhone Simulator/7.0.3/Applications/63925F20-AF97-4610-AF1C-B6B4157D1D92/Documents/DownLoad/books/2013_50.zip";
    
    
    对路径截取的9种操作
    
        NSLog(@"1=%@",[index lastPathComponent]);
    
        NSLog(@"2=%@",[index stringByDeletingLastPathComponent]);
    
        NSLog(@"3=%@",[index pathExtension]);
    
        NSLog(@"4=%@",[index stringByDeletingPathExtension]);
    
        NSLog(@"5=%@",[index stringByAbbreviatingWithTildeInPath]);
    
        NSLog(@"6=%@",[index stringByExpandingTildeInPath]);
    
        NSLog(@"7=%@",[index stringByStandardizingPath]);
    
        NSLog(@"8=%@",[index stringByResolvingSymlinksInPath]);
    
        NSLog(@"9=%@",[[index lastPathComponent] stringByDeletingPathExtension]);
    
    
    对应结果
    
     1=2013_50.zip
    
     2=/Users/junzoo/Library/Application Support/iPhone Simulator/7.0.3/Applications/63925F20-AF97-4610-AF1C-B6B4157D1D92/Documents/DownLoad/books
    
    3=zip
    
     4=/Users/junzoo/Library/Application Support/iPhone Simulator/7.0.3/Applications/63925F20-AF97-4610-AF1C-B6B4157D1D92/Documents/DownLoad/books/2013_50
    
    5=~/Documents/DownLoad/books/2013_50.zip
    
     6=/Users/junzoo/Library/Application Support/iPhone Simulator/7.0.3/Applications/63925F20-AF97-4610-AF1C-B6B4157D1D92/Documents/DownLoad/books/2013_50.zip
    
     7=/Users/junzoo/Library/Application Support/iPhone Simulator/7.0.3/Applications/63925F20-AF97-4610-AF1C-B6B4157D1D92/Documents/DownLoad/books/2013_50.zip
    
    8=/Users/junzoo/Library/Application Support/iPhone Simulator/7.0.3/Applications/63925F20-AF97-4610-AF1C-B6B4157D1D92/Documents/DownLoad/books/2013_50.zip
    
    9=2013_50
  • 相关阅读:
    Storm-源码分析-Topology Submit-Supervisor
    Storm-源码分析- Multimethods使用例子
    Storm-源码分析- Storm中Zookeeper的使用
    Storm-源码分析-EventManager (backtype.storm.event)
    Storm-源码分析-Topology Submit-Nimbus
    Storm-源码分析-Topology Submit-Nimbus-mk-assignments
    Storm-源码分析- Component ,Executor ,Task之间关系
    决策树之 C4.5
    JSBridge深度剖析
    【工具类】Date、Long、String 类型互转
  • 原文地址:https://www.cnblogs.com/wujy/p/4563369.html
Copyright © 2020-2023  润新知