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 ...
随机推荐
-
etcd第二集
参考文章:https://github.com/coreos/etcd/blob/master/Documentation/v2/api.mdhttp://www.cnblogs.com/zhengr ...
-
iOS NSFileManager 使用详解
使用NSFileManager 文件系统接口 允许访问文件夹内容 创建 重命名 删除文件 修改文件和文件属性,以及Finder对所有文件系统任务执行的一般操作. 访问NSFileManager,使用共 ...
-
UVA 11038 - How Many O&#39;s? 计算对答案的贡献
题意: 求[n, m]之间包含0的数字的个数题解:转化为求solve(n) - solve(m-1)的前缀问题 对于求0到n的解,我们举例 n = 25789 对于8这位,让其为0对答案的贡献是 (0 ...
-
[Struts2学习笔记] -- 环境配置
在创建好WebProject后,就可以开始进行Struts2的环境配置,可以到Struts2官网下载,本环境使用struts-2.3.24.1版本. 首先导入必要的jar包到WebProject的/W ...
-
request.getParameterValues与request.getParameter的差别
一. 简单的对照 request.getParameter用的比較多,相对熟悉 request.getParameterValues(String name)是获得如checkbox类(名字同样, ...
-
解决ODBC连接Oracle数据库报Unable to connect SQLState=08004问题
今天用ODBC连接Oracle数据库时,报了这么一个错“Unable to connect SQLState=08004 Oracle ODBC Ora-12154”,上网查了好久都说PowerDes ...
-
日期时间选择器、Bootstrap日期和时间表单组件。bootstrap-datetimepicker实现年月日,时分秒的选择。
参考链接:http://www.bootcss.com/p/bootstrap-datetimepicker/ 1.官网以及很详细的说明了如何使用,这里结合一下自己的使用来写下. 下载解压缩包以后,可 ...
-
10-ajax技术简介
一.ajax是什么?是网页中的异步刷新技术.其核心是js+xml二.执行过程1.js的核心对象XMLHttpRequest是一个具备像后台发送请求的一个对象2.XMLHttpRequest可以异步发送 ...
-
神州数码NAT地址转换配置
实验要求:熟练掌握NAT地址转换的配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip ad ...
-
机器学习进阶-图像金字塔与轮廓检测-轮廓检测 1.cv2.cvtColor(图像颜色转换) 2.cv2.findContours(找出图像的轮廓) 3.cv2.drawContours(画出图像轮廓) 4.cv2.contourArea(轮廓面积) 5.cv2.arcLength(轮廓周长) 6.cv2.aprroxPloyDP(获得轮廓近似) 7.cv2.boudingrect(外接圆)..
1. cv2.cvtcolor(img, cv2.COLOR_BGR2GRAY) # 将彩色图转换为灰度图 参数说明: img表示输入的图片, cv2.COLOR_BGR2GRAY表示颜色的变换形式 ...