1.属性传值:如果要从这个页面跳转到另一个页面 并同时把值传到另一个页面,就需要在另一个页面里面声明一个属性:如@property(nonatomic,copy)NSString *titleName; 并且要在另一个页面viewDidLoad里面:self.title = self.titleName 用相关控件去触发这个方法,进行传值。
2.自定义构造函数传值:
1.
3.通知传值:
(1).如果要从广播中心传一个值到接收者那里。创建两个类ViewController,HTTPResqustManager 先要在HTTPResqustManager.h里面声明一个类方法,在HTTPResqustManager.m里面准备相关的数据,还有一个通知中心,用来发送消息,在ViewController里面导入HTTPResqustManager头文件,还有在他里面自定义一个构造函数,并创建接收者,用相关控件来显示传过来的内容,实现接收者里的方法,最后在方法里面显示传来的值
(2)如果要在下一个页面把值传道上一个页面,在下一个页面创建一个通知中心,还要在上一个页面准备好一个接收通知的人,并且还要有方法去触发相关事件,利用导航控制器的方法和属性将值可以传代上一个页面了
4.Block传值:
block的声明
block声明公式
返回值类型(^名字)(参数列表);
block实现
block实现的公式
名字 = ^(参数列表){};
使用block的情况反向传值(用block)
列如:定义一个图片名字的block
1.局部变量
void(^imageNameBlock)(NSString *imageName);
如果想修改Block外部变量的值需添加__block 修饰
__block UIImage *image = nil;
__block UIImage *image;
imageNameBlock = ^(NSString *imageName){
image = [UIImage imageNamed:imageName];
self.view.backgroundColor = [UIColor colorWithPatternImage:image];
};
imageNameBlock(@“1.jpg");
2.全局变量
(1)先定义一个全局变量:
{
void(^imageNameBlock)(NSString *imageName;
}
block 循环使用
__weak ViewController *vc = self; // 弱引用 防止循环使用
__block UIImage *image;
imageNameBlock = ^(NSString *imageName){
image = [UIImage imageNamed:imageName];
vc.view.backgroundColor = [UIColor colorWithPatternImage:image];
};
定义一个全局变量:
{
void(^labelBlock)(NSString *labelContent);
}
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 200, 350, 50)];
label.contentMode = UIViewContentModeScaleAspectFit;
label.backgroundColor = [UIColor redColor];
[self.view addSubview:label];
labelBlock = ^(NSString *labelContent){
label.text = labelContent;
};
5.KVO传值:
首先写一个滚动视图的控件,并定义成全局变量
{
UIScrollView *myScrollView;
}
初始化滚动视图:
myScrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];
myScrollView.contentSize = CGSizeMake(0, 800);
myScrollView.backgroundColor =[UIColor blueColor];
[self.view addSubview:myScrollView];
使用KVO得到滚动视图 的偏移量
[myScrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
观察键值
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"contentOffset"]) {
NSLog(@"%@",change[@"contentOffset"]);
CGPoint set = [change[@"new"]CGPointValue];
NSLog(@"%f",set.y);
}
音效:
使用 AudioToolbox通过系统声音ID 播放音效
步骤: 1.注册 2.播放
NSString *path = [[NSBundle mainBundle]pathForResource:@"和局" ofType:@"aiff"];
1.注册系统声音的ID
SystemSoundID ID = 1;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)([NSURL fileURLWithPath:path]), &ID);
2.播放
AudioServicesPlaySystemSound(ID);
3.振动
AudioServicesPlayAlertSound(ID)
播放声音文件
使用AVFoundation(audio video)处理 音频 视频的操作
1.音频播放
如果想使用 音乐播放功能 就必须导入AVFoundation
使用AVAudioPlayer 播放音频
设置音频的音量(volum)、音频播放速率(rate)、音频播放位置、还可以得到它的总时长、监测音频是否播放完毕、音乐播放的循环次数...操作
[self creatPlayerWithAudioName:nil];
#pragma mark—音乐播放结束代理方法—
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSLog(@"播放完毕");
}
- (void)creatPlayerWithAudioName:(NSString *)name
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"男人哭吧不是罪-刘德华" ofType:@"mp3"];
if (player) {
player = nil;
}
初始化音乐播放器
player = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
音量
player.volume = 1;
******速率(如果想设置播放速率必须先开启允许设置)*****
player.enableRate = YES;
player.rate = 2;
声道(-1.0左声道 0.0中间 1.0右声道)
player.pan = -1.0;
循环次数 0播放一次负数循环播放 正数循环次数+1
player.numberOfLoops = 0;
player.delegate = self;
预播放 (把音乐文件的数据加载到内存)
[player prepareToPlay];
播放
[player play];
设置音乐播放器当前的播放时间
player.currentTime = 100;
durtaion 总时长 只读
NSLog(@"音乐的总时长:%f",player.duration);
NSLog(@"通道的数量:%ld",player.numberOfChannels);
NSLog(@"获取设备当前时间:%f",player.deviceCurrentTime);
player.isPlaying 是否正在播放
暂停
[player pause];
停止
[player stop];