我开始使用Rory Lewis书中的Absolute Beginners的iPhone和iPad应用程序开始研究objective-c,但是我被困在第5章.
我想制作一个缩小图像的按钮.
我的问题是,在我写完所有代码后,图像缩小到UIImageView(左上角)的点(0,0),而在视频中,图像缩小到其中心.我做了一些研究,发现CGAffineTransform使用对象的中心进行翻译,旋转等.
那为什么它在我的情况下不起作用?
我有最新的Xcode版本并没有做任何奇怪的事情.我希望我已经清楚了.对不起我的英语不好.
编辑 对不起代码,但我从手机上写了这个问题.无论如何,有罪的部分都是这样的
- (IBAction)shrink:(id)sender {
if(hasShrink == NO){
[shrinkButton setTitle:@"Grow" forState:UIControlStateNormal];
}
else if(hasShrink == YES){
[shrinkButton setTitle:@"Shrink" forState:UIControlStateNormal];
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
myIcon.transform = CGAffineTransformMakeScale(.25, .25);
hasShrink = YES;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
}
所有的动画都是正确编写的,应用程序确实有效,它只是缩小到左上角.为什么默认情况下该点未设置为UIImageView的中心?
编辑: 我发现这是一个由AutoLayout引起的问题.一旦禁用,一切顺利;)
我正在制作一个音频流媒体应用程序,我遇到了中断问题.我已经读过我应该使用AVAudioSessionInterruptionNotification,但我的问题是它只在中断开始时被调用,而不是在它结束时被调用.这是我的代码.
static dispatch_once_t pred;
static Player *sharedAudioPlayer = nil;
dispatch_once(&pred, ^
{
sharedAudioPlayer = [[self alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:sharedAudioPlayer selector:@selector(playerItemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:sharedAudioPlayer
selector:@selector(audioSessionInterrupted:)
name:AVAudioSessionInterruptionNotification
object:audioSession];
});
Run Code Online (Sandbox Code Playgroud)
然后
- (void)audioSessionInterrupted:(NSNotification*)notification {
NSDictionary *interruptionDictionary = [notification userInfo];
NSNumber *interruptionType = (NSNumber *)[interruptionDictionary valueForKey:AVAudioSessionInterruptionTypeKey];
if ([interruptionType intValue] == AVAudioSessionInterruptionTypeBegan) {
NSLog(@"Interruption started");
if (self.delegate && [self.delegate respondsToSelector:@selector(playerWasPaused)]) {
[self.delegate playerWasPaused];
}
} else if ([interruptionType intValue] == AVAudioSessionInterruptionTypeEnded){
NSLog(@"Interruption ended");
[player play];
} else {
NSLog(@"Something else happened");
} …Run Code Online (Sandbox Code Playgroud) 我有一个带有两个独立播放器的视图控制器,一个带有 AVAudioPlayer 的音频播放器和一个带有 AVPlayerViewController 的视频播放器。
当视图加载时,两个播放器也用它们的源进行初始化,但保持暂停,直到用户与其中一个进行交互。

我试图让这个应用程序能够在后台播放来自 AVAudioPlayer 的音频,所以我在应用程序的功能中设置了该选项并且它正在工作,但我有一些主要问题。
第一个问题是设置引起的
AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default)
Run Code Online (Sandbox Code Playgroud)
这是背景音频所必需的,但它使视频也可以在后台播放,这不是我想要的。有什么办法可以防止这种情况发生吗?
然后,我使用 MPRemoteCommandCenter 为 Lockscreen 和 Control Center 设置控件,指定音频播放器在用户与控件交互时应启动或暂停。如果我只使用音频而不启动播放器并在控制中心、锁屏和应用内播放器之间移动,一切正常。
但是,如果我开始使用 AVPlayerViewController 播放视频,暂停它,启动音频播放器并转到锁定屏幕,即使视频甚至没有播放,命令也会连接到视频。
在为控件运行的代码中没有提到视频播放器(我也尝试完全删除代码,但没有成功)。
这是预期的行为吗?有什么方法可以禁用它吗?
TL;DR
我有一个音频和视频播放器,并且只希望音频播放器能够在后台播放,但出于某种原因,来自 MPRemoteCommandCenter 的控件优先考虑视频播放器,我想更改/禁用此行为。