在iOS7中,默认情况下,UIBarButtonItem对样式UIBarButtonItemStylePlain使用Helvetica常规权重字体,对UIBarButtonItemStyleDone使用粗体.
我的应用程序使用自定义字体,我使用UIAppearance代理来实现此目的:
appearance = @{NSFontAttributeName: [UIFont fontWithName:@"ProximaNova-Regular" size:18.0]};
[[UIBarButtonItem appearance] setTitleTextAttributes:appearance
forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
麻烦的是,外观代理使Plain和Done样式按钮成为我上面指定的常规重量字体.
任何想法如何让UIBarButtonItem根据样式使用不同的自定义字体权重?
我正在构建一个转弯导航应用程序,播放周期性的短片声音.无论屏幕是否被锁定,声音都应该播放,应该与其他音乐播放混合,并且当播放此音频时应该播放其他音乐.
Apple在29:20分钟的"WWDC 2010会话412 iPhone OS第1部分音频开发"视频中详细讨论了转弯用例.实施效果很好,但有一个问题 - 当应用程序运行时,按下硬件音量控件可调整铃声音量,而不是应用音量.如果要更改应用程序音量,则必须在播放提示时按音量按钮.
Apple在视频中非常具体,您不应该让AVAudioSession处于活动状态,但如果AVAudioSession处于非活动状态,则音量按钮将无法控制我的应用程序的音量.
这是我用来设置的代码:
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
UInt32 shouldDuck = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(shouldDuck), &shouldDuck);
OSStatus activationResult = AudioSessionSetActive(true);
NSError* err = nil;
_player = [[AVAudioPlayer alloc] initWithData:audioData error:&err];
_player.delegate = self;
[_player play];
Run Code Online (Sandbox Code Playgroud)
并且我在最后将会话激活为NO,因为Apple建议:
OSStatus activationResult = AudioSessionSetActive(false);
NSAssert(activationResult == kAudioSessionNoError, @"Error deactivating audio session");
Run Code Online (Sandbox Code Playgroud)
有什么我想念的,或者我不得不违背他们在视频中推荐的内容?