iOS 独立开发记录(下)

侧边菜单栏

查看Github上相关实现,一开始选择的是SlideMenuControllerSwift,后来决定更改为自定义,使用更简洁的方式。

分离

分离之前的SliderMeanController,再添加动画。

1.MainViewControllerremove:

extension MainViewController:SlideMenuControllerDelegate{

func leftWillOpen() {

print("SlideMenuControllerDelegate: leftWillOpen")

OnceOpened = true

}

func leftDidOpen() {

print("SlideMenuControllerDelegate: leftDidOpen")

}

func leftWillClose() {

print("SlideMenuControllerDelegate: leftWillClose")

noteLabel.text = "\(metronome.noteNum)"

metreLabel.text = "\(metronome.metreView.numMetre)"

tempoLabel.text = "\(metronome.tempo)"

tempoItalianName(italianName)

initialHandelPoint()

metronome.metreView.setNeedsDisplay()

print("subview count:")

print(view.subviews.count)

self.ball.setNeedsDisplay()

}

func leftDidClose() {

print("SlideMenuControllerDelegate: leftDidClose")

}

}

LeftViewController

remove:

wiilappear:

initialMenu()

class里面:

weak var delegate: LeftMenuProtocol?

func initialMenu() {

let storyboard = UIStoryboard(name: "Main", bundle: nil)

let nonMenuController = storyboard.instantiateViewControllerWithIdentifier("purchaseViewController") as! PurchaseViewController

nonMenuController.delegate = self

self.nonMenuViewController = UINavigationController(rootViewController: nonMenuController)

}

class 前:

enum LeftMenu: Int {

case Main = 0

}

protocol LeftMenuProtocol : class {

func changeViewController(menu: LeftMenu)

}

class extension:

// MARK: - LeftMenuProtocol

extension LeftViewController: LeftMenuProtocol{

func changeViewController(menu: LeftMenu) {

switch menu {

case .Main:

self.slideMenuController()?.changeMainViewController(self.mainViewController,          close: true)

}

}

}

alert 转场:

self.slideMenuController()?.

changeMainViewController(self.nonMenuViewController, close: true)

App delegate里面:

private func createMenuView() {

// create viewController code...

let storyboard = UIStoryboard(name: "Main", bundle: nil)

let mainViewController = storyboard.instantiateViewControllerWithIdentifier("MainViewController") as! MainViewController

let leftViewController = storyboard.instantiateViewControllerWithIdentifier("LeftViewController") as! LeftViewController

let mvc: UINavigationController = UINavigationController(rootViewController: mainViewController)

UINavigationBar.appearance().tintColor = UIColor(hex: "689F38")

leftViewController.mainViewController = mvc

let slideMenuController = ExSlideMenuController(mainViewController:mvc, leftMenuViewController: leftViewController)

slideMenuController.automaticallyAdjustsScrollViewInsets = true

slideMenuController.delegate = mainViewController

//        self.window?.backgroundColor = UIColor(red: 236.0, green: 238.0, blue: 241.0, alpha: 1.0)

self.window?.rootViewController = slideMenuController

self.window?.makeKeyAndVisible()

}

purchaseViewCont:

class 里面:

weak var delegate: LeftMenuProtocol?

func done() {

delegate?.changeViewController(LeftMenu.Main)

}

override func viewWillAppear(animated: Bool) {

super.viewWillAppear(animated)

self.removeNavigationBarItem()

let doneTitle = NSLocalizedString("doneTitle", comment: "Purchase done title")

let rightButton: UIBarButtonItem = UIBarButtonItem(title: doneTitle, style: .Plain, target: self, action: #selector(done))

navigationItem.rightBarButtonItem = rightButton

动画Spring Animation

我使用的是MengTo的Spring动画库。

内购

技术参考:

https://developer.apple.com/in-app-purchase/

https://www.raywenderlich.com/122144/in-app-purchase-tutorial

https://www.raywenderlich.com/121218/video-tutorial-in-app-purchase-series-introduction

https://github.com/mattt/Ono

https://github.com/awseeley/Swift-In-App-Purchase-Tutorial

页面实现:

How to make a beautiful page for the purchase?

使用Collection View,使用卡片展示。

声音

Where to find the good sound?

推荐网站:

  • https://www.freesound.org/people/toiletrolltube/sounds/345691/
  • http://www.findsounds.com/ISAPI/search.dll?keywords=drum+solo

声音下载之后需要自己进行一些细化处理,推荐Sound Studio,它小而简洁,进行简单的处理足够了。

 

 

后台播放

参考书籍:iOS8 Programming

Appledelegate:

func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool  {

// paly on the background

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, withOptions: [])

// others

}

func applicationWillResignActive(application: UIApplication) {

_ = try? AVAudioSession.sharedInstance().setActive(true, withOptions: [])

}

func applicationDidBecomeActive(application: UIApplication) {

_ = try? AVAudioSession.sharedInstance().setActive(true, withOptions: [])

}

细节问题

问题:

为什么nav颜色无法更改,感觉蒙上了一层影?

解决:

参考:

Swift: https://github.com/DanisFabric/RainbowNavigation

p.p1 {margin: 0.0px 0.0px 0.0px 60.0px; font: 16.0px ‘Helvetica Neue’; color: #999999}p.p2 {margin: 0.0px 0.0px 0.0px 60.0px; font: 16.0px ‘Helvetica Neue’; color: #999999; min-height: 18.0px}span.s1 {font: 16.0px ‘PingFang SC’}span.Apple-tab-span {white-space:pre}

Swift: https://github.com/DanisFabric/RainbowNavigation

sBarMask?.autoresizingMask = [.FlexibleWidth,.FlexibleHeight]

if let tempBackgroundView = backgroundView {

insertSubview(statusBarMask!, aboveSubview: tempBackgroundView)

}else {

insertSubview(statusBarMask!, atIndex: 0)

}

}

statusBarMask?.backgroundColor = color

}

public func df_setBackgroundColor(color: UIColor) {

if backgroundView == nil {

setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)

shadowImage = UIImage()

backgroundView = UIView(frame: CGRect(x: 0, y: -20, width: UIScreen.mainScreen().bounds.width, height: 64))

backgroundView?.userInteractionEnabled = false

backgroundView?.autoresizingMask = [.FlexibleHeight,.FlexibleWidth]

insertSubview(backgroundView!, atIndex: 0)

}

backgroundView?.backgroundColor = color

}

public func df_reset() {

setBackgroundImage(nil, forBarMetrics: .Default)

shadowImage = nil

backgroundView?.removeFromSuperview()

backgroundView = nil

}

// MARK: Properties

private var backgroundView:UIView? {

get {

return objc_getAssociatedObject(self, &kBackgroundViewKey) as? UIView

}

set {

objc_setAssociatedObject(self, &kBackgroundViewKey, newValue, .OBJC_ASSOCIATION_RETAIN)

}

}

private var statusBarMask:UIView? {

get {

return objc_getAssociatedObject(self, &kStatusBarMaskKey) as? UIView

}

set {

objc_setAssociatedObject(self, &kStatusBarMaskKey, newValue, .OBJC_ASSOCIATION_RETAIN)

}

}

}

在MainViewController中添加:

self.navigationController?.navigationBar.df_setBackgroundColor(UIColor.clearColor())

 

为什么点击按钮之后,图片位置会改变?

改变UIButton的image之后,它的位置也会改变,需要将之前的先存储,改变图片之后再赋给它。

CGPoint currentLoc = self.imageButton.center;

[self.imageButton setImage:[UIImage imageNamed:@”face”] forState:UIControlStateNormal];

self.imageButton.center = currentLoc;

好像不是这个问题。我把外面的View去掉一层就OK了。

UIScrollerView

UIScrollerView的contentSize是取决于其子视图的,所以一定要通过子视图来限制其大小。

UIScrollerView需要探索的地方还很多,比如像相册这样的应用,是两个scrollerView,一个用来zoom,一个用来左右切换。

测试

TestFlight测试 (外部测试需审核)

其他第三方测试 (无需审核)

发布

  • 如何取好App名字?
  • 如何写好App介绍?
  • 制作App简短视频?

网站

因为也做过一些网站,用Bootstrap写过前端,PHP写过后台。基本的HTML/CSS,JS都会些,所以做网站对我来说没什么问题。不过,你不需要那么多知识,你可以在直接使用模板,再进行修改即可。

  • 选择模板
  • 准备内容素材(图片、文字、链接)

最终效果:http://azureyu.com/pulse

截图

素材:

  • 在设备上运行,同时按home+电源键进行截图
  • 或者使用模拟器运行之后按Command+S,即可保持截图

AppStore介绍截图制作:

  • 使用Sketch
  • 推荐模板:https://github.com/LaunchKit/SketchToAppStore
  • 思考介绍内容,编辑,修改,再修改,再修改
  • 导出

视频

录制步骤:

  1. 连接设备
  2. 打开QuickTime Player
  3. 进行文件影片录制
  4. 使用iMovie进行剪辑,iMove中可直接新建应用商店预览视频。

Tips:

  1. 视频上传需使用Safair浏览器,最好用iMovie中直接选择导出为应用商店预览视频。这样不会出现视屏帧数太多等问题。
  2. 如何旋转视频?使用QuickTime Player打开,然后在菜单中选择编辑,向左选择即可。

最好将所有素材放在同一个文件夹中,按照一定的命名方式进行整理。

上传

https://developer.apple.com/app-store/cn/

https://itunespartner.apple.com/cn/apps/videos

https://app.grammarly.com/ 避免英语文法错误

介绍

English:

Pulse is a clean and beautiful Metronome. It helps you better your music feeling and skill. With Pulse, your play time will be much more joyful.

Features:

  • Colorful Themes. There are ten attractive themes that you can choose: night, tree, coffee, pink, azure, blue, purple…… make your play time more colorful.
  • Nice Sounds. You can hear the different kinds of sounds: wood, ping, claves, triangle, shaker, blocks……choice the one suit your ear.
  • Save setlist. You can save the setlist that you often play, it’s easy to use.
  • Swing. You can visualize the time passing, see the movements. In Pulse, there are 7 swing types: none, small, medium, large, ball, square, diamond. It always has the one you want.

Others:

  • Play on the lock mood and background.
  • Universal app, available on you iPod touch、iPhone and iPad.

Support :

中文:

律动是一款简洁而美观的节拍器。它能够帮助你提升乐感和技能。缤纷的主题,悦耳的音色,可视化时间流逝的钟摆都能让你的练习更为多彩。

特点:

  • 十种主题缤纷主题任你选择:碳黑、咖啡、森林、粉红、蔚蓝、紫藤、翠绿等。
  • 十余种悦耳音色舒适双耳:实木、沙铃、三角铁、铃环、木鱼、鼓、钢琴、铁、铛等。
  • 一键保存演出列表:一键保持你的演出列表,节约你的时间,方便你的练习。
  • 7种钟摆模式:无, 小, 中, 长, 球, 方, 菱。可视化时间流逝的最佳选择。

其他:

  • 支持锁屏播放和后台播放
  • 支持屏幕常量
  • 支持所有iPod Touch、iPhone和iPad设备

反馈:

被拒5-24

版本上传错误。

再次被拒

Apple审核团队说App会在iPad Air下点击菜单按钮会crash,可是测试了很多次之后,我都没能重现crash,和他们沟通无果。等了两天,我在代码原封不动的情况下,重新build了一个版本,再上传,就通过了。

审核通过 6-1

Market

  • 产品推荐网站 :例如36NEXT,MindStore之类。
  • Weibo Twitter BBS

用户会去哪些地方?

时间: 2024-10-09 01:20:38

iOS 独立开发记录(下)的相关文章

iOS 独立开发记录(上)

个月前,完成了个人App的2.0版本,也在普天同庆的六一儿童节这天上架了.因为是个人开发,很多实现都是边探索边做.现在完成之后再回顾,发现自己走了些弯路.所以写了这篇总结,概览了从想法.设计.开发到最终发布的过程.希望读者参考本文,可以少走一些弯路:另外,本文也给列出了开发中具体思路和资源列表. 知识从何而来? Apple的知识又是从何而来?是哪些人在创造这些机制,又是哪些人在传播这些机制?为什么要这样设计呢?为什么要这样编码呢? iOS开发是在询问什么问题?技术的实现,究竟是在问什么?为什么要

【开发记录】iOS中使用 Reachability 检测网络

如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Reachability都能做什么 检测3中网络环境 2G/3G wifi 无网络 如何使用通知 单个controller 多个controller 简单的功能: 仅在wifi下使用 Reachability简介 Reachablity 是一个iOS下检测,iOS设备网络环境用的库. 监视目标网络是否可

ios应用内购买开发记录教程 ios iap In-App Purchases

以下问题在2014年7月测试的.不保证以后有啥不一样的 1.在iTunes Connect里添加应用,标题/截图/描述/关键字不能更改,icon和包名可以更改.添加后应用不能删除. 2.在In-App Purchases里添加商品,没有4个类型的选项.原因:iTunes Connect上的“Contracts, Tax, and Banking”信息没有设置 3.In-App Purchases的商品添加后无法删除. 4.ios6模拟器可以测试,ios7模拟器测试会说无法连上iTunes.“Er

iOS系统提供开发环境下命令行编译工具:xcodebuild

iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单来说,Workspace就是一个容器,在该容器中可以存放多个你创建的Xcode Project, 以及其他的项目中需要使用到的文件. 使用Workspace的好处有: 1),扩展项目的可视域,即可以在多个项目之间跳转,重构,一个项目可以使用另一个项目的输出.Workspace会负责各个Project

iOS多线程开发——GCD的使用与多线程开发浅析(二)

对于iOS多线程开发,我们时刻处于学习之中,在看书中,看文档中,项目开发中,都可以去提高自己.最近刚看完了<Objective-C高级编程 iOS与OS X多线程和内存管理>这本书后,对多线程有了更为深入的理解,故在此做一个总结与记录.这本书我已经上传至网盘  https://pan.baidu.com/s/1c2fX3EC ,这本书是iOS开发者必读的书之一,写得很不错,欢迎大家下载阅读.书的封面如下,故也称狮子书: . (1)多线程会遇到的问题 . 多线程会出现什么问题呢?当多个线程对同一

iOS企业级开发初级课程-表视图(13集)

首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜索栏.分组的使用.然后我们学习了如何对表视图单元格进行删除.插入.移动等操作.最后本章向大家介绍了表视图UI设计模式方面的内容. 序号 技术点 1 表视图-1-表视图介绍 2 表视图-2-简单表视图 3 表视图-3-简单表视图下 4 表视图-4-自定义单元格 5 表视图-5-搜索栏-1 6 表视图-

批量大文本筛选过滤工具开发记录

批量大文本筛选过滤工具开发记录 本周花了两三天的时间做了一个大文本数据筛选工具,主要是针对excel打开很慢或者无法打开的几百兆乃至几G的csv.txt文件,提供常规的数据筛选.统计和输出功能.这个大文本筛序需求对生产中的数据挑选和数据分析来说是比较常见的.本文就开发的过程简单记录如下: 使用什么开发语言? 怎样保证用户体验? 如何维护优化? 使用什么开发语言? 这问得有点像是废话.我很熟悉Python,它的开发速度足够的快,又足够灵活,特别是它强大的eval函数可以直接执行字符串代码,字符串代

iOS App开发那些事:如何选择合适的人、规范和框架?

自从做Team Leader之后,身上权责发生了变化,于是让我烦恼的不再是具体某个功能,某个界面的实现,而是如何在现有代码的基础上做渐进式的改进,创造出比较合适规范和框架,使得组内成员更快更好地完成任务.一年下来,颇有点想法,于是啰嗦几句关于iOS App开发的那些事. 合适的人 首先明确一点,合适的人是指纯技术团队的建设.一支战斗力再强的技术团队,面对一个朝三暮四,分分钟推翻自己原有想法的产品经理/项目经理,再好的戏也唱不出来.花几个月加班加点做项目,还没发布,直接推翻重做,这时候你就得去楼下

【Cocos2d-X】独立开发并发布自己的第一款android手游——SpaceWar

大家好,我是BlueCoder,很久都没写博客了哈--没办法,决定考研的我,只能一心备研了.不过呢,作为喜欢游戏开发的我,一直觉得自己还有一件事应该在考研前完成--对,正如博文标题所示,我希望独立开发并发布属于自己的一款手游--SpaceWar. 关注过BlueCoder博文的朋友呢,可能应该知道我之前用MFC也写过一款名为空中大战(SpaceWar)的游戏(不过现在看来,这个游戏着实有点儿挫哈,毕竟这个只能算是一个游戏Demo哈,呵呵).那么现在这款即将发布的同名为SpaceWar的手游呢,是