我正在尝试保持组织有序并为我的应用创建视图层次结构.因此,例如我想创建一个自定义视图来显示一些文本,另一个自定义视图来显示进度,然后在使用基于视图的应用程序模板创建的主视图中使用所有这些视图.
我知道如何以编程方式创建它- 您创建UIView子类,实现drawRect方法,UIView在Interface Builder中放置一个空,并将它的Class放到我的自定义类中.我的问题是我想在Interface Builder中以编程方式创建这些自定义视图.
到目前为止,我已经UIViewController使用XIB文件创建了控制器,并在viewDidLoad模板的视图控制器方法中创建了自定义视图控制器实例,并将其视图UIView添加为Interface Builder中添加的空白的子视图(同样,您将在编程方法中更改类) ).
它可以工作,但对我来说更糟糕的是,我很难相信没有更好的方法可以在接口构建器中添加这些自定义视图,而无需实现viewDidLoad方法并创建控制器并在其中添加视图那种方法.
我写了一些小的可可应用程序,它的主窗口有HUD风格.问题是 - 当我设置HUD样式时,Interface Builder自动设置实用程序样式 - 这使主窗口最顶层(始终可见于其他所有窗口).有没有办法获得HUD样式面板/窗口,但没有使它最顶层?
所以我有一个应用程序,即使屏幕关闭,我也希望它保持正常运行.以前当我想要这样做时,我使用了这个黑客/技巧 - 我在后台循环播放静音/空声(AudioServicesPlaySystemSound),所以如果用户按下开/关按钮,应用程序仍然在后台工作 - 所以它永远不会允许iPhone进入睡眠模式 - 它只是关闭屏幕,可能是wifi或蓝牙(以及据我记得的iPod Touch加速度计).它奏效了.我想在我的新应用程序中使用相同的技巧但是当我现在测试它时它似乎不再起作用了.背景中的声音播放(当我用一些声音替换"空"音频文件时我可以听到它播放)即使屏幕关闭但它应播放的声音(使用AVAudioPlayer)也没有 播放(即使我再次打开屏幕).我不知道它何时停止工作(肯定是在3.x操作系统上工作).难道我做错了什么?Apple是否更改/修复了"黑客",即使屏幕关闭,您的应用也可以正常工作?是否有另一种方法可以让设备进入睡眠状态(并减少电量消耗)但继续工作?
这是我用来播放背景/静音的代码:
-(void) playSilentSound
{
CFBundleRef mainBundle = CFBundleGetMainBundle ();
CFURLRef silentUrl = CFBundleCopyResourceURL (mainBundle, CFSTR ("silence"), CFSTR ("aiff"), NULL);
AudioServicesCreateSystemSoundID (silentUrl, &silentSound);
silentTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0 target: self selector:@selector(playSilence) userInfo: nil repeats: YES];
}
-(void) playSilence
{
AudioServicesPlaySystemSound (silentSound);
}
Run Code Online (Sandbox Code Playgroud)
这就是我播放即使屏幕关闭也应该播放的声音的方式:
-(BOOL) playSound: (NSString *) path withLoops: (BOOL) loops stopAfter: (int) seconds
{
NSError *error;
player = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath: path] error: &error];
player.delegate = self;
player.numberOfLoops = …Run Code Online (Sandbox Code Playgroud)