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(, , , )];
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的更多相关文章
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- IOS开发基础知识--碎片33
1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...
- IOS开发基础知识--碎片42
1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...
- IOS开发基础知识--碎片47
1:解决ios静态库中的类别(category)在工程中不能使用 解决方法为:找到 target 的图标,更改其 Other Linker Flags 为: -all_load 或 -force_lo ...
- IOS开发基础知识--碎片50
1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...
- IOS开发基础知识--碎片3
十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...
- IOS开发基础知识--碎片11
1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...
- IOS开发基础知识--碎片14
1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...
- IOS开发基础知识--碎片16
1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...
随机推荐
- codeforces B. Ohana Cleans Up
B. Ohana Cleans Up Ohana Matsumae is trying to clean a room, which is divided up into an n by n grid ...
- 使用karma测试平时写的小demo(arguments为例)
有人说前端自动化测试非常困难,我觉得确实如此.在项目中,我个人也不放心写的测试,还是要手动测试.但是我们平时写demo学习时,完全可以使用自动化测试. 传统demo 1,新建一个html 2,写入js ...
- JS控制的事件
鼠标点击弹出提示事件: <input type="button" value="鼠标点击弹出提示" onclick="DianJi()" ...
- ThinkPHP学习(二)
开发规范 1.命名规范 使用ThinkPHP开发的过程中应该尽量遵循下列命名规范: 特例:在ThinkPHP里面,有一个函数命名的特例,就是单字母大写函数,这类函数通常是某些操作的快 捷定义,或者有特 ...
- jQuery-1.9.1源码分析系列(六) 延时对象
首先我们需要明白延时对象有什么用? 第一个作用,解决时序以及动态添加执行函数的问题. function a(){alert(1)}; function b(){alert(2)}; function ...
- TCP的阻塞和重传机制
TCP的阻塞和重传机制 网络拥堵 现在网络上大部分的网络请求都是以TCP的方式进行传输的了.网络链路是固定的,各种链路情况也是不一样的.网络拥堵一直是TCP协议设计和使用的时候尽力要避免的.比如,从T ...
- Spring Scope:Web项目中如何安全使用有状态的Bean对象?
Web系统是最常见的Java应用系统之一,现在流行的Web项目多使用ssm或ssh框架,使用spring进行bean的管理,这为我们编写web项目带来了很多方便,通常,我们的controler层使用注 ...
- 网页中多个图标在一张图片上,使用css将各图标显示
现在的网页中显示很多图标算是常态,发现项目中页面上用到的图标都是单个图标单个文件,用的时候直接往页面上挂,这确实很常态. 如果,网站是挂在外网上,或者网速过低,又大量使用图标的情况下,由于浏览器和服务 ...
- [Asp.net 5] Logging-日志系统的基本架构(下)
接上节内容,我们继续讲解日志的其他部分. ILoggerProvider以及扩展类 我们在上节的架构图上并没有看到有直接实现该接口的实现类.那么如果将Logger类直接使用会有什么结果呢? var f ...
- Swift控制语句
前言 Swift提供了类似C语言的流程控制结构,包括可以多次执行任务的for和while循环.还有基于特定条件选择执行不同代码分支的if.guard和switch语句,还有控制流程跳转到其他代码的br ...