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. JSP生成Excel报表

    JSP实现报表下载 <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri=" ...

  2. HTTP的RST包与WinHttp延迟关闭TCP连接

    一.RST包也常见于断开TCP连接  几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包.如: 在TCP协议中RST表示复位,用来异常的关闭连接 ...

  3. 【开源】OSharp3.3框架解说系列(7.1):初始化流程概述

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  4. ASP.NET MVC之国际化(十一)

    前言 在项目中遇到国际化语言的问题是常有的事情,之前在做关于MVC国际化语言时,刚开始打算全部利用AngularJS来实现,但是渐渐发现对于页面Title难以去控制其语言转换,于是对于页面Tiltle ...

  5. 记一次ASP.NET MVC性能优化(实际项目中)

    前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...

  6. Oracle层次查询

    Oracle层次查询的语法如下: 下面根据两道“烧脑”的题具体来体现: 1. 根据时间先后顺序,十二星座的英文名称用逗号串起来为'Aries,Taurus,Gemini,Cancer,Leo,Virg ...

  7. DB2 Enterprise Server Edition(DB2 ESE)9.1在Windows Server 2008 下出现无法新建数据库的情况,及解决办法

    在安装有,DB2 9.1版本的Windows Server 2008 上面,使用默认的安装方式导致无法创建数据库,相关的错误提示: "SQL3012C 发生系统错误(原因码= "& ...

  8. Cesium原理篇:6 Render模块(4: FBO)

    Cesium不仅仅提供了FBO,也就是Framebuffer类,而且整个渲染过程都是在FBO中进行的.FBO,中文就是帧缓冲区,通常都属于高级用法,但其实,如果你了解了它的基本原理后,用起来还是很简单 ...

  9. jQuery中使用ajax,$.post

     jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...

  10. 我的angularjs源码学习之旅1——初识angularjs

    angular诞生有好几年光景了,有Google公司的支持版本更新还是比较快,从一开始就是一个热门技术,但是本人近期才开始接触到.只能感慨自己学习起点有点晚了.只能是加倍努力赶上技术前线. 因为有分析 ...