小编hal*_*d17的帖子

CGAffine转换并缩放到图像的中心

我开始使用Rory Lewis书中的Absolute BeginnersiPhone和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引起的问题.一旦禁用,一切顺利;)

iphone scaling cgaffinetransform ios

9
推荐指数
3
解决办法
2万
查看次数

AVAudioSessionInterruptionNotification未正确调用

我正在制作一个音频流媒体应用程序,我遇到了中断问题.我已经读过我应该使用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)

notifications ios avaudiosession

8
推荐指数
0
解决办法
3986
查看次数

防止 AVPlayerController 劫持 MPRemoteCommandCenter

我有一个带有两个独立播放器的视图控制器,一个带有 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 的控件优先考虑视频播放器,我想更改/禁用此行为。

ios avplayer avplayerviewcontroller mpremotecommandcenter

5
推荐指数
1
解决办法
400
查看次数