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


    1:使用@protocol实现delegate和datasource模式

    #import <UIKit/UIKit.h>
    
    
    @protocol MyViewDataSource,MyViewDelegate;
    
    @interface myView : UIView<UIAlertViewDelegate>
    
    @property(nonatomic,assign)id<MyViewDelegate> myViewDelegate;
    
    @property(nonatomic,assign)id<MyViewDataSource> myViewDataSource;
    
    -(void)myShowAlert;
    
    @end
    
    
    
    @protocol MyViewDelegate <NSObject>
    
    @optional
    
    -(void)alertDidPop:(myView *)myView;
    
    -(void)alertConfirmShow:(myView *)myView clickedButtonAtIndex:(NSInteger)buttonIndex;
    
    @end
    
    
    @protocol MyViewDataSource <NSObject>
    
    @optional
    
    -(NSString *)textOfAlert:(myView *)myView;
    
    @required
    
    - (NSUInteger)numberOfItemsInMyView:(myView *)myView;
    
    @required
    
    @end
    #import "myView.h"
    
    @implementation myView
    
    -(void)myShowAlert
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"测试实例"
                                                        message:@"message"
                                                       delegate:self
                                              cancelButtonTitle:@"取消"
                                              otherButtonTitles:@"确定",nil];
        alert.message = [self.myViewDataSource textOfAlert:self];
        [alert show];
    }
    
    - (void)didPresentAlertView:(UIAlertView *)alertView
    {
        [self.myViewDelegate alertDidPop:self];
    }
    
    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        [self.myViewDelegate alertConfirmShow:self clickedButtonAtIndex:buttonIndex];
    }
    
    @end

    使用方式:

    #import "myView.h"
    
    @interface ViewController ()<MyViewDataSource,MyViewDelegate>
    
    @end
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        myView *myVw = [[myView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];
        myVw.myViewDataSource = self;
        myVw.myViewDelegate = self;
        [self.view addSubview:myVw];
        [myVw myShowAlert];
    }
    代理实现的方法:
    
    - (void)alertDidPop:(UIView *)myView
    {
        myView.backgroundColor = [UIColor yellowColor];
    }
    
    -(NSString *)textOfAlert:(myView *)myView
    {
        return @"信息";
    }
    
    -(void)alertConfirmShow:(myView *)myView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        NSLog(@"你选中了%d",buttonIndex);
    }

     2:动画 UIView animateWithDuration 使用详解

    + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations
    
    + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
    
    + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

    duration为动画持续的时间。animations为动画效果的代码块

    可设动作属性:

    • frame
    • bounds
    • center
    • transform
    • alpha
    • backgroundColor
    • contentStretch

    例如一个视图淡出屏幕,另外一个视图出现的代码

    [UIView animateWithDuration:1.0 animations:^{
            firstView.alpha = 0.0;
            secondView.alpha = 1.0;
    }];

    连续动画(可以在completion代码块中添加动画):

    [UIView animateWithDuration:2.0
                     animations:^{
                         oldImageView.alpha = 0.0;
                         newImageView.alpha = 1.0;
                         //imageView.center = CGPointMake(500.0, 512.0);
                     }
                     completion:^(BOOL finished){
                         [UIView animateWithDuration:4.0
                                          animations:^{
                                              newImageView.center = CGPointMake(500.0, 512.0);
                                          }];
                     }];

    从上往下一个动作(默认是左上角,把要改变的值放在animations里):

    -(UIView *)myView
    {
        if (!_myView) {
            _myView=[[UIView alloc]initWithFrame:CGRectZero];
            _myView.backgroundColor=[UIColor redColor];
        }
        return _myView;
    }
    
    
    - (IBAction)BtnAction:(id)sender {
        self.myView.frame = CGRectMake(0,44, 320, 0);
        [self.view addSubview:self.myView];
        [UIView animateWithDuration:0.3 animations:^{
            self.myView.backgroundColor=[UIColor redColor];
            self.myView.frame = CGRectMake(0,44, 320, 100);
        
        } completion:^(BOOL finished) {
    
        }];
    }

     3:UIView 的旋转和缩放

     label.transform = CGAffineTransformMakeRotation(90 *M_PI / 180.0);
    
    //顺时针旋转 90度
    
     label.transform = CGAffineTransformMakeRotation(180 *M_PI / 180.0);
    
    //顺时针 旋转180度
    
     label.transform = CGAffineTransformMakeRotation(270 *M_PI / 180.0);
    
    //顺时针旋转270度
    
    CGAffineTransform transform = label.transform;
    
    transform = CGAffineTransformScale(transform, 2,0.5);//前面的2表示横向放大2倍,后边的0.5表示纵向缩小一半  
    
    label.transform = transform;

     4:加载歌词的代码实例

    [ti:伤痕]
    [ar:曾敏杰]
    [al:]
    [by:]
    [offset:0]
    [00:00.11]伤痕 (Live) - 曾敏杰
    [00:01.58]词:李宗盛
    [00:02.41]曲:李宗盛
    [00:03.28]键盘:刘卓/李海郡
    [00:04.78]吉他:高飞/金天
    [00:06.20]贝司:李九君
    [00:07.29]鼓手:卢炜
    [00:08.17]乐队总监:刘卓
    [00:09.43]音响总监:金少刚
    [00:11.01]
    [00:22.75]夜已深 还有什么人
    [00:28.21]让你这样醒着数伤痕
    [00:32.28]
    [00:33.09]为何临睡前会想要留一盏灯
    [00:38.04]你若不肯说 我就不问
    [00:42.07]
    [00:42.74]只是你现在不得不承认
    [00:47.35]
    [00:47.93]爱情有时候是一种沉沦

    歌词都是以lrc的文件内容,可以进行加载,然后对它进行处理;

    @implementation WPFLyricParser
    
    + (NSArray *)parserLyricWithFileName:(NSString *)fileName {
        
        // 根据文件名称获取文件地址
        NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
        
        // 根据文件地址获取转化后的总体的字符串
        NSString *lyricStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
        
        // 将歌词总体字符串按行拆分开,每句都作为一个数组元素存放到数组中
        NSArray *lineStrs = [lyricStr componentsSeparatedByString:@"
    "];
        
        // 设置歌词时间正则表达式格式
        NSString *pattern = @"\[[0-9]{2}:[0-9]{2}.[0-9]{2}\]";
        NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
        
        // 创建可变数组存放歌词模型
        NSMutableArray *lyrics = [NSMutableArray array];
        
        // 遍历歌词字符串数组
        for (NSString *lineStr in lineStrs) {
            
            NSArray *results = [reg matchesInString:lineStr options:0 range:NSMakeRange(0, lineStr.length)];
            
            // 歌词内容
            NSTextCheckingResult *lastResult = [results lastObject];
            NSString *content = [lineStr substringFromIndex:lastResult.range.location + lastResult.range.length];
            
            // 每一个结果的range
            for (NSTextCheckingResult *result in results) {
                
                NSString *time = [lineStr substringWithRange:result.range];
    
                #warning 对于 NSDateFormatter 类似的重大开小对象,最好使用单例管理
                NSDateFormatter *formatter = [NSDateFormatter sharedDateFormatter];
                formatter.dateFormat = @"[mm:ss.SS]";
                NSDate *timeDate = [formatter dateFromString:time];
                NSDate *initDate = [formatter dateFromString:@"[00:00.00]"];
                
                // 创建模型
                WPFLyric *lyric = [[WPFLyric alloc] init];
                lyric.content = content;
                // 歌词的开始时间
                lyric.time = [timeDate timeIntervalSinceDate:initDate];
                
                // 将歌词对象添加到模型数组汇总
                [lyrics addObject:lyric];
            }
        }
        
        // 按照时间正序排序
        NSSortDescriptor *sortDes = [NSSortDescriptor sortDescriptorWithKey:@"time" ascending:YES];
        [lyrics sortUsingDescriptors:@[sortDes]];
       
        return lyrics;
    }
    
    @end

     5:UIWebView加载POST请求

     NSURL *url = [NSURL URLWithString: @"http://your_url.com"];
    NSString *body = [NSString stringWithFormat: @"arg1=%@&arg2=%@", @"val1",@"val2"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url]; 
    [request setHTTPMethod: @"POST"];
    [request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]]; 
    [webView loadRequest: request];  
  • 相关阅读:
    31 整数中1出现的次数(从1到n整数中1出现的次数)
    算法寒假实习面试经过之 十一贝(offer) 联想研究院(电话一面 被拒)
    百度feed 寒假实习 一面二面(offer)
    30连续子数组的最大和
    29最小的K个数
    28数组中出现次数超过一半的数字
    MySQL操作数据库和表的基本语句(DDL)
    Oracle————存储过程与函数
    Oracle清空数据库中数据表数据的方法
    Linux之常用Shell脚本总结
  • 原文地址:https://www.cnblogs.com/wujy/p/4890648.html
Copyright © 2020-2023  润新知