项目知识点.Part1

时间:2022-08-23 20:26:44

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的更多相关文章

  1. BBS项目知识点汇总

    目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...

  2. Django项目知识点汇总

    目录 一.wsgi接口 二.中间件 三.URL路由系统 四.Template模板 五.Views视图 六.Model&ORM 七.Admin相关 八.Http协议 九.COOKIE 与 SES ...

  3. stylus项目知识点

    1.在项目中,引入.sty文件的时候,用来下面方式 @import "~common/stylus/variable.styl" ~ 是stylus的写法,参考https://gi ...

  4. Django blog项目知识点总结

    数据库操作部分 当我们在Django项目中的models.py下写好创建表的代码后.为了创建好这些数据库表,我们再一次请出我的工程管理助手 manage.py.激活虚拟环境,切换到 manage.py ...

  5. 项目知识点.Part3

    内存管理: 基本数据类型或者Core Foundation对象都没有引用计数 主线程会自动创建释放池,子线程需要手动创建释放池. 具体的区别:http://www.cnblogs.com/langti ...

  6. 项目知识点.Part2

    1. 取消collectionView头视图重叠情况:以下两种情况效果一样 但是有一点点bug 每次remove之后 需要把视图刷到上面才会显示(后续会改进方法) for (UIView *view ...

  7. react native定报预披项目知识点总结

    1.TextInput组件对安卓的适配问题 textInput 在iOS 显示正常,但是在android下会出现下横线,并且字会被遮盖 因此一般都这么用该组件 <TextInput style= ...

  8. vue项目知识点总结

    一.vue中如何获取select被选中的id和对应的值. <!-- 下拉框 --> <div v-show="moreStore" class="sel ...

  9. blog项目知识点梳理

    1.获取图片验证码: def get_validCode_img(request): # 方式1: # import os # path= os.path.join(settings.BASE_DIR ...

随机推荐

  1. etcd第二集

    参考文章:https://github.com/coreos/etcd/blob/master/Documentation/v2/api.mdhttp://www.cnblogs.com/zhengr ...

  2. iOS NSFileManager 使用详解

    使用NSFileManager 文件系统接口 允许访问文件夹内容 创建 重命名 删除文件 修改文件和文件属性,以及Finder对所有文件系统任务执行的一般操作. 访问NSFileManager,使用共 ...

  3. UVA 11038 - How Many O&&num;39&semi;s&quest; 计算对答案的贡献

    题意: 求[n, m]之间包含0的数字的个数题解:转化为求solve(n) - solve(m-1)的前缀问题 对于求0到n的解,我们举例 n = 25789 对于8这位,让其为0对答案的贡献是 (0 ...

  4. &lbrack;Struts2学习笔记&rsqb; -- 环境配置

    在创建好WebProject后,就可以开始进行Struts2的环境配置,可以到Struts2官网下载,本环境使用struts-2.3.24.1版本. 首先导入必要的jar包到WebProject的/W ...

  5. request&period;getParameterValues与request&period;getParameter的差别

    一. 简单的对照 request.getParameter用的比較多,相对熟悉 request.getParameterValues(String   name)是获得如checkbox类(名字同样, ...

  6. 解决ODBC连接Oracle数据库报Unable to connect SQLState&equals;08004问题

    今天用ODBC连接Oracle数据库时,报了这么一个错“Unable to connect SQLState=08004 Oracle ODBC Ora-12154”,上网查了好久都说PowerDes ...

  7. 日期时间选择器、Bootstrap日期和时间表单组件。bootstrap-datetimepicker实现年月日,时分秒的选择。

    参考链接:http://www.bootcss.com/p/bootstrap-datetimepicker/ 1.官网以及很详细的说明了如何使用,这里结合一下自己的使用来写下. 下载解压缩包以后,可 ...

  8. 10-ajax技术简介

    一.ajax是什么?是网页中的异步刷新技术.其核心是js+xml二.执行过程1.js的核心对象XMLHttpRequest是一个具备像后台发送请求的一个对象2.XMLHttpRequest可以异步发送 ...

  9. 神州数码NAT地址转换配置

    实验要求:熟练掌握NAT地址转换的配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip ad ...

  10. 机器学习进阶-图像金字塔与轮廓检测-轮廓检测 1&period;cv2&period;cvtColor&lpar;图像颜色转换&rpar; 2&period;cv2&period;findContours&lpar;找出图像的轮廓&rpar; 3&period;cv2&period;drawContours&lpar;画出图像轮廓&rpar; 4&period;cv2&period;contourArea&lpar;轮廓面积&rpar; 5&period;cv2&period;arcLength&lpar;轮廓周长&rpar; 6&period;cv2&period;aprroxPloyDP&lpar;获得轮廓近似&rpar; 7&period;cv2&period;boudingrect&lpar;外接圆&rpar;&period;&period;

    1. cv2.cvtcolor(img, cv2.COLOR_BGR2GRAY) # 将彩色图转换为灰度图 参数说明: img表示输入的图片, cv2.COLOR_BGR2GRAY表示颜色的变换形式 ...