项目知识点.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 ...
随机推荐
- Android实现弹出输入法时,顶部固定,中间部分上移的效果
前言 最近做项目时碰到一个问题,在意见反馈里面,提交按钮写到顶部,当用户输入反馈意见或者邮箱手机号时,弹出的输入法会上移整个页面,导致提交按钮显示不了. 很明显,这样的界面是非常不友好的,找了一些资料 ...
- 查询grep结果的前后n行
linux系统中,利用grep打印匹配的上下几行 如果在只是想匹配模式的上下几行,grep可以实现. $grep -5 'parttern' inputfile //打印匹配行的前后5行 ...
- thinkphp中使用PHPEXCEL导出数据
thinkphp中导出二维数组到Excel 1.解决时间长度导致EXCEL出现###问题 2.解决长数值型 带来的科学记数法导出问题 订单号不再变为科学记数法 而是直接字符串类型 代码如下: < ...
- bzoj3907: 网格
http://www.cnblogs.com/Tunix/p/4354348.html #include<cstdio> #include<cstring> #include& ...
- winform Label与DataGridView右对齐 分类: WinForm 2014-05-19 20:51 446人阅读 评论(0) 收藏
实现Label与DataGridView对齐有两种方法,差别不大: 定义: Label名称:lblName DataGridView名称:dgvData 第一种: lblName.Location = ...
- CSS3弹性盒模型之Flexbox是布局模块box-sizing & box-orient & box-direction & box-ordinal-group
css3 box-sizing属性 box-sizing属性可以为三个值之一:content-box(default),border-box,padding-box. content-box,bord ...
- mac下修改mysql的默认字符集为utf8
1,检查默认安装的mysql的字符集 mysql> show variables like '%char%'; +--------------------------+------------- ...
- Android获得线性渐变某点的颜色
安卓官方确实提供了好多非常强大的工具给我们了,例如我们最近经常在shape中加入gradient(渐变),像我的项目中用的是线性渐变, <?xml version="1.0" ...
- Apple-Watch开发2 APPIcon设置
网址:http://makeappicon.com/ 直接放置到相应的文件即可 (these are all in pixels) 48 x 48 55 x 55 58 x 58 80 x 80 87 ...
- 解决mybatis使用枚举的转换
解决mybatis使用枚举的转换 >>>>>>>>>>>>>>>>>>>>> ...