项目知识点.Part1
1. storyboard中添加scrollview:
先添加scrollView,进行约束
添加View 进行约束 相对于scrollView
如果水平滑动:设置vertically in Container 竖直方向滑动:Horizontally in Container
将View的宽度以scroView为基准 改变倍数
2. 类似于音乐播放器中的图片旋转:定时器
在M_PI前面添加负号 可实现反方向转
1> masksToBounds 允许修改layout里的属性
[self.MusicImageView layoutIfNeeded]: 当需要改变layout的时候,调用
第一种旋转: 比较麻烦 还得设置current值在不断更新:
// 设置图片为圆形:
// 修改layout前 先将masksToBounds设置为YES
[self.MusicImageView layoutIfNeeded];
self.imageDetail.layer.masksToBounds = YES;
self.imageDetail.layer.cornerRadius = self.imageDetail.frame.size.width/; [NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(rotateAction) userInfo:nil repeats:YES];
// 将定时器加到runloop中
[[NSRunLoop currentRunLoop] addTimer:time forMode:NSRunLoopCommonModes];
- (void)rotateAction {
current += 0.001;
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI * current);
self.imageDetail.transform = transform;
}
第二种更新:不需要设置其他变量实时更新
在block中:
runLoop:子线程中就关闭了
滑动页面时不会因为优先级的问题 影响图片转动
- (void)play {
[self.avPlayer play];
self.isPlay = YES;
// 定时器使用方法:
/*
每隔TimeInterval0.1秒调用这个方法
*/
if (self.timer == nil) {
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playTimer) userInfo:nil repeats:YES];
}
// 将定时器加到runloop中
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
block调用中:
self.MusicImageView.transform = CGAffineTransformRotate(self.MusicImageView.transform, M_PI / );
2> 定时器:
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playTimer) userInfo:nil repeats:YES] :
每隔TimeInterval秒调用这个方法
定时器销毁:
[self.timer invalidate];
安全写法:
创建前判断是否为空
销毁前判断是否存在
// 创建
if (self.timer == nil) {
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playTimer) userInfo:nil repeats:YES];
} // 销毁
if (self.timer) {
// 销毁定时器
[self.timer invalidate];
// 手动置空:
self.timer = nil;
}
3. scrollView:
约束了scroll只能在竖直方向滑动 下面这个属性为YES时 scrollView在水平方向上也可以滑动 只有改成NO 才只能在竖直方向滑动
// 自动添加了上下64 设置为NO 取消viewController自动调整
self.automaticallyAdjustsScrollViewInsets = NO;
4. __weak __block 修饰self 防止循环引用:
在本类调用其他类中的block,使用self不会造成循环引用
5. block使用:
block声明:
@property (copy,nonatomic) void (^block)(NSString *);
block实现:
实现的内容暂时不走 先把block实现的代码块存起来
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
TwoViewController *twoVC =(TwoViewController *) segue.destinationViewController;
// block实现
twoVC.block = ^(NSString *str) {
self.label.text = str;
};
}
block调用:
当调用block的时候(安全写法:调用前先判断block是否存在):self.block(self.textField.text)---->开始执行上述存起来的block实现代码块 将调用传进来的值赋给实现代码
- (IBAction)popViewController:(UIButton *)sender {
// block调用:
if (self.block) {
self.block(self.textField.text);
}
[self.navigationController popViewControllerAnimated:YES];
}
6.
1> 设置pch文件 :Prefix Header
绝对路径:拷贝到其他电脑就不好用了 /Users/lanou3g/Documents/项目期/MusicTextOne/Class/Help/PrefixHeader.pch
相对路径:$(SRCROOT)/Class/Help/PrefixHeader.pch
2> componentsSeparatedByString:根据某个字符串分割, 返回值是数组
7. 多线程实现网络请求 数据解析:
+ (void)ResquestDataURL:(NSString *)URLStr block:(void(^)(NSArray *))block {
// 子线程请求数据
dispatch_async(dispatch_get_global_queue(, ), ^{
NSArray *array = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:URLStr]];// 获取数据
// 创建model数组
NSMutableArray *modelArray =[NSMutableArray array];
for (NSDictionary *dic in array) {
MusicModel *model = [[MusicModel alloc] init];
[model setValuesForKeysWithDictionary:dic];
[RequestData musicModelRequest:model];
[modelArray addObject:model];
}
// 主线程返回数据
dispatch_async(dispatch_get_main_queue(), ^{
// 在主线程返回数据
if (block) {
NSLog(@"block = %@", block);
block(modelArray);
}
});
});
// NSLog(@"哈哈哈哈哈哈");
}
8. 获取storyboard中的控制器方法:
UIStoryboard *storyB = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
ListenDetailViewController *DetailVC = [storyB instantiateViewControllerWithIdentifier:@"detail_id"];
9. 获取自定义UITableViewCell中的按钮所在的cell
这个点也很重要哦 ~
-(IBAction)button:(id)sender{
UIButton* button = (UIButton*)sender;
UITableViewCell* buttonCell = (UITableViewCell*)[sender superview];
NSUInteger row = [[tableView indexPathForCell:buttonCell]row];
}
10.iOS NSString 和NSData 转换
格式转换部分的原博:http://blog.csdn.net/bailu66/article/details/7665357
(除格式转换的其他内容均为本人所写)
NSString 转换成NSData 对象
NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncoding];
NSData 转换成NSString对象
NSData * data;
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData 转换成char*
NSData *data;
char *test=[data bytes];
char* 转换成NSData对象
byte* tempData = malloc(sizeof(byte)*16);
NSData *content=[NSData dataWithBytes:tempData length:16];
哈哈哈
项目知识点.Part1的更多相关文章
- BBS项目知识点汇总
目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...
- Django项目知识点汇总
目录 一.wsgi接口 二.中间件 三.URL路由系统 四.Template模板 五.Views视图 六.Model&ORM 七.Admin相关 八.Http协议 九.COOKIE 与 SES ...
- stylus项目知识点
1.在项目中,引入.sty文件的时候,用来下面方式 @import "~common/stylus/variable.styl" ~ 是stylus的写法,参考https://gi ...
- Django blog项目知识点总结
数据库操作部分 当我们在Django项目中的models.py下写好创建表的代码后.为了创建好这些数据库表,我们再一次请出我的工程管理助手 manage.py.激活虚拟环境,切换到 manage.py ...
- 项目知识点.Part3
内存管理: 基本数据类型或者Core Foundation对象都没有引用计数 主线程会自动创建释放池,子线程需要手动创建释放池. 具体的区别:http://www.cnblogs.com/langti ...
- 项目知识点.Part2
1. 取消collectionView头视图重叠情况:以下两种情况效果一样 但是有一点点bug 每次remove之后 需要把视图刷到上面才会显示(后续会改进方法) for (UIView *view ...
- react native定报预披项目知识点总结
1.TextInput组件对安卓的适配问题 textInput 在iOS 显示正常,但是在android下会出现下横线,并且字会被遮盖 因此一般都这么用该组件 <TextInput style= ...
- vue项目知识点总结
一.vue中如何获取select被选中的id和对应的值. <!-- 下拉框 --> <div v-show="moreStore" class="sel ...
- blog项目知识点梳理
1.获取图片验证码: def get_validCode_img(request): # 方式1: # import os # path= os.path.join(settings.BASE_DIR ...
随机推荐
- C语言中数据类型转换的学习
1. 整型和枚举类型数据的转换 测试代码如下: #include <stdio.h> typedef enum _E_TYPE_T { E_TYPE_1 = -1, E_T ...
- 将solr3.5整合到Tomcat6.x中
最近在学习Lucene,然后进入到solr中,没想到一开始,solr就给我来了这么困难的开头,希望万事开头难,以后可以顺利一点吧.记录下将solr3.5整合到Tomcat6.x中的过程,以及遇到的一个 ...
- 【设计模式 - 7】之过滤器模式(Filter)
1 模式简介 过滤器模式(Filter)也叫标准模式(Criteria),这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来. 2 实例 需求 ...
- 接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”
接口的思想:在于可以增加很多类都需要实现的功能.比如:各式各样的商品,可能隶属不同公司,但工商部门都必须具有显示商标的功能(实现同一接口).商标的具体制作由各个公司自己去实现. 给其他类去实现,不同的 ...
- C#将数据以XML格式写入Excel
本文转载:http://www.cnblogs.com/eflylab/archive/2008/09/21/1295580.html c#将数据导入Excel另类方法 今天公司突然给个Excel模版 ...
- Swift学习笔记八:枚举
1. 枚举语法 1)枚举的定义 使用enum关键词而且把它们的整个定义放在一对大括号内: enum SomeEumeration { // enumeration definition go ...
- 把Excel数据导入到数据库
引入命名空间 using System.IO; using System.Data; using System.Data.OleDb; 引入命名空间 首先要把Excel上传到服务器 //上传Excel ...
- (转载)loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
原文出处:http://ajita.iteye.com/blog/1728243/ 先说明一下,本人是开发,对测试不是特别熟悉,但因工作的需要,也做过一些性能测试方面的东西.比较久之前很简单的用过,最 ...
- [总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- NSCondition的用法,NSCondication实现线程同步,生产者消费问题实现(转载)
NSCondition的用法 使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题. 基本思路是,首先要创建公用的NSCondition实例.然后: 消费者取得锁,取产品,如果没有 ...