iOS开发拓展篇—音频处理(音乐播放器2)

说明:该文主要介绍音乐播放界面的搭建。

一、跳转

1.跳转到音乐播放界面的方法选择

  (1)使用模态跳转(又分为手动的和自动的)

  (2)使用xib并设置跳转

2.两种方法的分析

  可以使用模态的方法,添加一个控制器,让这个控制器和音乐播放控制器类进行关联,脱线,设置标识符且在cell的点击事件中执行segue即可。

  步骤说明:

  (1)在storyboard中新拖入一个控制器,然后设置和playing控制器类相关联。


  (2)设置手动跳转


  (3)设置segue的标识符


  (3)跳转代码处理


不推荐使用模态的原因如下:

    当选中一首音乐跳转到播放界面进行播放后,如果要跳回到音乐列表界面,那么最常见的做法是在音乐播放控制器上添加一个按钮。

    当点击的时候,销毁这个控制器(dismissed)。但是,控制器销毁了那么正在播放的音乐也就随之不在了。

    且由于播放界面控制器的布局是固定的,因此这里选择的方法是使用xib进行创建。

3.选择的方法

  新建一个xib,对应于音乐播放控制器。

  xib的结构如下图所示:


细节:控制器只需要创建一次,因此建议使用懒加载,当然也可是把播放器设置为单例

 1 //  2 // YYMusicsViewController.m
 3 //
 4  5 #import "YYMusicsViewController.h"  6 #import "YYMusicModel.h"  7 #import "MJExtension.h"  8 #import "YYMusicCell.h"  9 #import "YYPlayingViewController.h" 10 11 @interface YYMusicsViewController ()
12 @property(nonatomic,strong)NSArray *musics;
13 @property(nonatomic,strong)YYPlayingViewController *playingViewController;
14 @end 15 16 @implementation YYMusicsViewController
17 #pragma mark-懒加载
18 -(NSArray *)musics
19 {
20 if (_musics==nil) {
21 _musics=[YYMusicModel objectArrayWithFilename:@"Musics.plist"];
22  }
23 return _musics;
24 }
25 -(YYPlayingViewController *)playingViewController
26 {
27 if (_playingViewController==nil) {
28 _playingViewController=[[YYPlayingViewController alloc]init];
29  }
30 return _playingViewController;
31 }


4.xib的内部细节:

(1)已经实现了约束,用于适配ios6和ios7。

(2)设置音乐名称和歌手的View设置为半透明的,设置方法如下:


  设置为30%


注意:不要再storyboard中控件的属性面板上设置透明度(这样的话,这个控件中的子控件也是同样的透明度)。

    不推荐的做法:


(3)按钮点击发光


(4)设置view隐藏能够节省一些性能。(参考代码)

(5)在切换控制器的过程中,设置窗口不能点击(这样做是为了防止用户多次连续的点击歌曲名会出现的问题)。

5.补充:

  项目代码中拖入了UIView的分类,以方便计算frame

二、涉及到的代码

在播放控制器的.h文件中提供一个公共对象方法接口

YYPlayingViewController.h文件

1 // YYPlayingViewController.h 2 3 #import <UIKit/UIKit.h>
4 5 @interface YYPlayingViewController : UIViewController
6 //显示控制器 7 -(void)show;
8 @end


YYPlayingViewController.m文件

 1 //  2 // YYPlayingViewController.m
 3 //
 4  5 #import "YYPlayingViewController.h"  6  7 @interface YYPlayingViewController ()
 8 - (IBAction)exit;
 9 10 @end 11 12 @implementation YYPlayingViewController
13 #pragma mark-公共方法
14 -(void)show
15 {
16 //1.禁用整个app的点击事件 17 UIWindow *window=[UIApplication sharedApplication].keyWindow;
18 window.userInteractionEnabled=NO;
19 20 //2.添加播放界面
21 //设置View的大小为覆盖整个窗口 22 self.view.frame=window.bounds;
23 //设置view显示 24 self.view.hidden=NO;
25 //把View添加到窗口上 26  [window addSubview:self.view];
27 28 //3.使用动画让View显示 29 self.view.y=self.view.height;
30 [UIView animateWithDuration:0.25 animations:^{
31 self.view.y=0;
32 } completion:^(BOOL finished) {
33 window.userInteractionEnabled=YES;
34  }];
35 }
36 #pragma mark-内部的按钮监听方法
37 //返回按钮 38 - (IBAction)exit {
39 //1.禁用整个app的点击事件 40 UIWindow *window=[UIApplication sharedApplication].keyWindow;
41  window.userInteractionEnabled=NO;
42 43 //2.动画隐藏View 44 [UIView animateWithDuration:0.25 animations:^{
45 self.view.y=window.height;
46 } completion:^(BOOL finished) {
47 window.userInteractionEnabled=YES;
48 //设置view隐藏能够节省一些性能 49 self.view.hidden=YES;
50  }];
51 }
52 @end


cell的点击事件中的处理代码:

 1 /**
 2  * cell的点击事件
 3 */  4 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 5 {
 6 //取消选中被点击的这行  7  [tableView deselectRowAtIndexPath:indexPath animated:YES];
 8  9 //调用公共方法 10 [self.playingViewController show];
11 12 // //执行segue跳转
13 // [self performSegueWithIdentifier:@"music2playing" sender:nil]; 14 }

时间: 2024-12-23 03:20:17

iOS开发拓展篇—音频处理(音乐播放器2)的相关文章

iOS开发拓展篇—音频处理(音乐播放器3)

说明:这篇文章主要介绍音频工具类和播放工具类的封装. 一.控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewController.music=self.music[indexPath.row];不能满足 第二种做法:把整个数组传递给它 第三种做法:设置一个数据源,设置播放控制器的数据源是这个控制器.self.parentViewController.dataSource=self;好处:没有耦合性,任何实现了协议的可以作为数据源. 第四种做法:把整个项目会

iOS开发拓展篇—音频处理(音乐播放器6)

一.图片处理 说明: Aspect表示按照原来的宽高比进行缩放. Aspectfit表示按照原来的宽高比缩放,要求看到全部图片,后果是不能完全覆盖窗口,会留有空白. Aspectfill表示按照原来的宽高比缩放,但只能看到部分图片.引发的问题:可能会有一部分超出屏幕. 所以,如果选择了Aspectfill模式,那么需要剪切超出的图片,在storyboard中也可以进行设置. 下面的两种设置是等效的. (1)在storyboard中进行设置 (2)使用代码裁剪 二.播放处理 1.当前歌曲播放结束之

iOS开发拓展篇—音频处理(音乐播放器4)

说明:该文主要介绍音乐播放器实现过程中的一些细节控制. 实现的效果: 一.完整的代码 YYPlayingViewController.m文件 1 // 2 // YYPlayingViewController.m 3 // 20-音频处理(音乐播放器1) 4 // 5 // Created by apple on 14-8-13. 6 // Copyright (c) 2014年 yangyong. All rights reserved. 7 // 8 9 #import "YYPlaying

iOS开发拓展篇—音频处理(音乐播放器1)

说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如下: 二.新建两个控制器 (1)新建一个控制器,用于展示音乐文件列表界面,其继承自UITableViewController (2)新建一个控制器,用于展示播放界面,其继承自UIViewController (3)在storyboard中,把之前的控制器删除,换上一个导航控制器,设置tableViewController与之前新建的控制器类进

iOS开发拓展篇—音频处理(音乐播放器5)

实现效果: 一.半透明滑块的设置 1 /** 2 *拖动滑块 3 */ 4 - (IBAction)panSlider:(UIPanGestureRecognizer *)sender { 5 6 //1.获得挪动的距离 7 CGPoint t=[sender translationInView:sender.view]; 8 //把挪动清零 9 [sender setTranslation:CGPointZero inView:sender.view]; 10 11 //2.控制滑块和进度条的

iOS开发拓展篇-XMPP简单介绍

iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容 有许多的IM系统,如AOL IM.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已

iOS开发拓展篇—应用之间的跳转和数据传递

iOS开发拓展篇-应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够打开appB这个应用. 1.新建两个应用,分别为A和B. 2.设置应用B的url. 3.在应用A中编写打开app的代码 点击之后,会跳转到新的控制器. 注意:打开应用B的过程中,B有两种状态. 第一种状态:B并没有启动,那么会启动B.并调用下面的方法. 第二种状态:此时B已经启动了,但是在后台运行,

Android应用开发之简易、大气音乐播放器实现专辑倒影效果_Android

今天要实现的功能是实现专辑倒影效果,这个功能已经属于图像处理方面的了,对图像处理我不怎么在行,等一下会介绍一个很实用的工具类,专门用来进行图像处理的.这个工具类不是我写的,我只是拿来用到自己的项目当中,这已经足够了,我已经完美实现我想要的效果. 效果图: < 一个很有用的工具类 /SimpleBeautyMusicPlayer/src/com/wwj/sb/utils/ImageUtil.java package com.wwj.sb.utils; import java.io.ByteArra

iOS开发拓展篇—封装音频文件播放工具类

一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - (id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; - (id)initWithData:(NSData *)data error:(NSError **)outError; 准备播放(缓冲,提高播放的流畅性) - (BOOL)prepareToPlay;