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(, , , )];
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(,, , );
[self.view addSubview:self.myView];
[UIView animateWithDuration:0.3 animations:^{
self.myView.backgroundColor=[UIColor redColor];
self.myView.frame = CGRectMake(,, , ); } completion:^(BOOL finished) { }];
}

3:UIView 的旋转和缩放

 label.transform = CGAffineTransformMakeRotation( *M_PI / 180.0);

//顺时针旋转 90度

 label.transform = CGAffineTransformMakeRotation( *M_PI / 180.0);

//顺时针 旋转180度

 label.transform = CGAffineTransformMakeRotation( *M_PI / 180.0);

//顺时针旋转270度

CGAffineTransform transform = label.transform;

transform = CGAffineTransformScale(transform, ,0.5);//前面的2表示横向放大2倍,后边的0.5表示纵向缩小一半  

label.transform = transform;

4:加载歌词的代码实例

[ti:伤痕]
[ar:曾敏杰]
[al:]
[by:]
[offset:]
[:00.11]伤痕 (Live) - 曾敏杰
[:01.58]词:李宗盛
[:02.41]曲:李宗盛
[:03.28]键盘:刘卓/李海郡
[:04.78]吉他:高飞/金天
[:06.20]贝司:李九君
[:07.29]鼓手:卢炜
[:08.17]乐队总监:刘卓
[:09.43]音响总监:金少刚
[:11.01]
[:22.75]夜已深 还有什么人
[:28.21]让你这样醒着数伤痕
[:32.28]
[:33.09]为何临睡前会想要留一盏灯
[:38.04]你若不肯说 我就不问
[:42.07]
[:42.74]只是你现在不得不承认
[:47.35]
[: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:@"\n"]; // 设置歌词时间正则表达式格式
NSString *pattern = @"\\[[0-9]{2}:[0-9]{2}.[0-9]{2}\\]";
NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:pattern options: error:NULL]; // 创建可变数组存放歌词模型
NSMutableArray *lyrics = [NSMutableArray array]; // 遍历歌词字符串数组
for (NSString *lineStr in lineStrs) { NSArray *results = [reg matchesInString:lineStr options: range:NSMakeRange(, 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];

IOS开发基础知识--碎片25的更多相关文章

  1. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  2. IOS开发基础知识--碎片33

    1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...

  3. IOS开发基础知识--碎片42

    1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...

  4. IOS开发基础知识--碎片47

    1:解决ios静态库中的类别(category)在工程中不能使用 解决方法为:找到 target 的图标,更改其 Other Linker Flags 为: -all_load 或 -force_lo ...

  5. IOS开发基础知识--碎片50

      1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...

  6. IOS开发基础知识--碎片3

    十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...

  7. IOS开发基础知识--碎片11

    1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...

  8. IOS开发基础知识--碎片14

    1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...

  9. IOS开发基础知识--碎片16

    1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...

随机推荐

  1. 深入理解DOM节点类型第七篇——文档节点DOCUMENT

    × 目录 [1]特征 [2]快捷访问 [3]文档写入 前面的话 文档节点document,隶属于表示浏览器的window对象,它表示网页页面,又被称为根节点.本文将详细介绍文档节点document的内 ...

  2. ASP.NET MVC之下拉框绑定四种方式(十)

    前言 上两节我们讲了文件上传的问题,关于这个上传的问题还未结束,我也在花时间做做分割大文件处理以及显示进度的问题,到时完成的话再发表,为了不耽误学习MVC其他内容的计划,我们今天开始好好讲讲关于MVC ...

  3. EntityFramework之原始查询如何查询未映射的值,你又知道多少?

    前言 今天又倒腾了下EF,如题所示,遇到了一些问题,并最终通过尝试找到了解决方案,可能不是最终的解决方案,若你有更好的解决方案,望告知,同时通过阅读此文,定让你收获不少. 引入 当我们查询时一直是中规 ...

  4. 【续集】塞翁失马,焉知非福:由 Styles.Render 所引发 runAllManagedModulesForAllRequests="true" 的思考

    在上一篇中,还有个遗留问题没有解决,就是 ASP.NET MVC MapRoute .htm 不起作用,如果不使用 runAllManagedModulesForAllRequests="t ...

  5. matlab基础教程——根据Andrew Ng的machine learning整理

    matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...

  6. Oracle配置和使用闪回

    环境:RHEL 6.4 + Oracle 11.2.0.4 目录: 一.闪回查询 1.1 闪回查询举例 1.2 闪回版本查询举例 二.闪回事物 2.1 闪回事物查询的先决条件 2.2 闪回事物查询 三 ...

  7. Robot Framework自动化测试 ---视频与教程免费分享

    当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以 ...

  8. Kooboo CMS - Html.FrontHtml.Position 详解

    DataContract 数据契约 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html https://msdn.micr ...

  9. ASP.NET CMS模板培训教程

    注意:此文档中出现所有的类,都是公司内部的,也就是说,只是给公司内部人员培训的一篇文章而已,如果其他的人看到了, 看不懂里面的类,那是因为这都是我公司内部的框架. 首先是进入我们的系统的后台,然后选择 ...

  10. js构建ui的统一异常处理方案(四)

    上一篇我们介绍了统一异常处理方案的设计方案,这一篇我们将直接做一个小例子,验证我们的设计方案. 例子是一个todo的列表界面(页面代码参考于https://github.com/zongxiao/Dj ...