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. Qt on Android: Qt Quick 之 Hello World 图文具体解释

    在上一篇文章,<Qt on Android:QML 语言基础>中,我们介绍了 QML 语言的语法,在最后我们遗留了一些问题没有展开,这篇呢,我们就正式開始撰写 Qt Quick 程序,而那 ...

  2. android 04 AbsoluteLayout

    绝对布局:layout_x,layout_y:坐标精准定位 xml文件:不推荐使用 <AbsoluteLayout xmlns:android="http://schemas.andr ...

  3. 计算机体系结构-CPU

    NUMA

  4. Gitolite轻松部署/管理git server

    对于今天越来越受欢迎的Git,相信做开发的朋友都基本有所耳闻.它最大的便利就是分布式的开发库,让使用git作为源码管理库的开发者可以在本地提交代码的修改而不用提交到远程的库,同时需要和团队协作.同步代 ...

  5. objective c 学习(一)

    问题一:我在程序中看到大量的减号.中括号和NS****这种东西,他们是什么玩意儿? 1 减号(或者加号) 减号表示一个函数.或者方法.或者消息的开始,怎么说都行. 比如c#中,一个方法的写法可能是: ...

  6. GUI编程笔记(java)11:使用Netbeans工具进行GUI编程

    Netbeans工具:是基于java语言进行GUI界面设计的工具 Visual Studio工具:是基于C#语言进行GUI界面设计的工具

  7. Java基础知识强化16:深入分析Java线程中断机制

    1.Thread.interrupt真的能中断线程吗?       在平时的开发过程中,相信都会使用到多线程,在使用多线程时,大家也会遇到各种各样的问题,今天我们就来说说一个多线程的问题——线程中断. ...

  8. 【IBM】Merlin 给 Java 平台带来了非阻塞 I/O

    Merlin 给 Java 平台带来了非阻塞 I/O 新增的功能大幅降低了线程开销 Java 技术平台早就应该提供非阻塞 I/O 机制了.幸运的是,Merlin(JDK 1.4)有一根几乎在各个场合都 ...

  9. MVC3.0 提交表单的方法

    在views中使用 @using (Html.BeginForm()) 来完成,其中放一个submit类型的提交按钮,如: @using (Html.BeginForm()) { @Html.Vali ...

  10. vs在winform中不给力哈-错误不提示

    我的操作系统是windows Server 2008 x64,运行winform的时候,对Dictionary累加值.运行的时候,项目一闪而过,于是我在Project的Properties上选择运行的 ...