小编jow*_*wie的帖子

如何在后台线程上淡出AVAudioPlayer?

我有一个音频文件,当用户滚动UIScrollView时需要淡出.但是,performSelector:withObject:afterDelay:在用户停止滚动之前,任何方法都会被阻止.所以我试图创建一些代码来在另一个线程上执行淡出:

- (void)fadeOut
{
    [NSThread detachNewThreadSelector:@selector(fadeOutInBackground:) toTarget:self withObject:self.audioPlayer];
}

- (void)fadeOutInBackground:(AVAudioPlayer *)aPlayer
{
    NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
    [self performSelector:@selector(fadeVolumeDown:) withObject:aPlayer afterDelay:0.1]; 
    [myPool release];
}

- (void)fadeVolumeDown:(AVAudioPlayer *)aPlayer
{
    aPlayer.volume = aPlayer.volume - 0.1;
    if (aPlayer.volume < 0.1) {
        [aPlayer stop];         
    } else {
        [self performSelector:@selector(fadeVolumeDown:) withObject:aPlayer afterDelay:0.1];  
    }
}
Run Code Online (Sandbox Code Playgroud)

它得到了performSelector,但没有进一步,因为我猜它试图在一个它无法访问的线程上执行.我甚至无法改变它,performSelector:onThread:withObject:waitUntilDone:因为没有延迟选项.

有任何想法吗?他们为什么要这么难以淡出声音呢?呻吟

谢谢!

objective-c avaudioplayer nsthread ipad ios

7
推荐指数
1
解决办法
6551
查看次数

如何在一开始就检测到iPad的interfaceRotation?

我在第一个UIViewController初始化(在代码中)让我的iPad应用程序检测到它的interfaceOrientation时遇到了问题.事实上,如果我追踪application.statusBarOrientation,即使我在横向上启动,它也会返回1(UIInterfaceOrientationPortrait).

如果我在我的第一个UIViewController中跟踪self.interfaceOrientation,它将保持为1,直到它到达viewWillDisappear ...不幸的是,这太晚了!

这是一些代码(即使没有太多可看):

在我的appDelegate中我有这个:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
     // show loading screen first
     [window addSubview:loadingScreenViewController.view];
     [window makeKeyAndVisible];

     NSLog(@"applicationDidBecomeActive:statusBarOrientation = %d", application.statusBarOrientation);
     return YES;
}
Run Code Online (Sandbox Code Playgroud)

其中跟踪1(肖像),即使我清楚地看到状态栏是横向...并且在第一个视图控制器中我有这个:

- (void)viewDidLoad
{
    [super viewDidLoad];
     NSLog(@"self.interfaceOrientation = %d", self.interfaceOrientation);
}
Run Code Online (Sandbox Code Playgroud)

即使在横向模式下也会追踪1.

有任何想法吗?难倒在这里!

谢谢 :)

:-Joe

objective-c statusbar viewdidload ipad uiinterfaceorientation

6
推荐指数
1
解决办法
1523
查看次数

CAAnimationGroup的最大持续时间值(CFTimeInterval)是多少?

我有两个旋转动画CAAnimationGroup,一个从零开始,另一个重复并从该状态自动反转:

- (void)addWobbleAnimationToView:(UIView *)view amount:(float)amount speed:(float)speed
{
    NSMutableArray *anims = [NSMutableArray array];

    // initial wobble
    CABasicAnimation *startWobble = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    startWobble.toValue = [NSNumber numberWithFloat:-amount];
    startWobble.duration = speed/2.0;
    startWobble.beginTime = 0;
    startWobble.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    [anims addObject:startWobble];

    // rest of wobble
    CABasicAnimation *wobbleAnim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    wobbleAnim.fromValue = [NSNumber numberWithFloat:-amount];
    wobbleAnim.toValue = [NSNumber numberWithFloat:amount];
    wobbleAnim.duration = speed;
    wobbleAnim.beginTime = speed/2.0;
    wobbleAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    wobbleAnim.autoreverses = YES;
    wobbleAnim.repeatCount = INFINITY;
    [anims addObject:wobbleAnim];

    CAAnimationGroup *wobbleGroup = [CAAnimationGroup animation];
    wobbleGroup.duration = …
Run Code Online (Sandbox Code Playgroud)

core-animation objective-c ipad caanimation ios

6
推荐指数
1
解决办法
1418
查看次数

NSURL在模拟器中为空,但在iPad上没问题

我正在尝试将音频文件加载到iPad上的AVAudioPlayer中.当我在iPad上运行时,它会在捆绑中找到它.但是,如果我尝试通过模拟器运行它,我会得到NSURL的null错误.这是代码片段(num是任意int):

NSString *name = [NSString stringWithFormat:@"st-answermachine-%i", num];
NSLog(@"name = %@", name);
NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"m4a"];
NSLog(@"path = %@", path);
NSURL *url = [NSURL URLWithString:path];
NSLog(@"url = %@", url);
Run Code Online (Sandbox Code Playgroud)

在simluator中,Debugger Console跟踪这个:

name = st-answermachine-1

path =/Users/joe/Library/Application Support/iPhone Simulator/3.2/Applications/B85E9CC8-6E39-47B9-XXXX-1E3A2CE145D1/MyApp.app/st-answermachine-1.m4a

url =(null)

但如果我在设备上试试,我会得到这个:

name = st-answermachine-1

path = /var/mobile/Applications/116DA1CB-EA13-4B80-XXXX-EBD46C8E2095/MyApp.app/st-answermachine-1.m4a

url = /var/mobile/Applications/116DA1CB-EA13-4B80-XXXX-EBD46C8E2095/MyApp.app/st-answermachine-1.m4a

有什么想法我可能会遇到这个问题吗?

谢谢!

objective-c nsurl ipad ios ios-simulator

4
推荐指数
1
解决办法
1028
查看次数

如何从ABAddressBookRef中提取Country字段?

我无法理解如何访问ABAddressBookRef中的地址属性.我用电话号码做得很好:

ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSArray* phoneNumbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);
CFRelease(phoneNumberProperty);
Run Code Online (Sandbox Code Playgroud)

但是唉...我无法弄清楚如何为地址做这件事.如果我这样做:

ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);
NSArray *address = (NSArray *)ABMultiValueCopyArrayOfAllValues(addressProperty);
Run Code Online (Sandbox Code Playgroud)

我回到看起来像一个字典,但它被键入一个数组.如何访问其中的属性?我在网上看到了大量不同的建议,但它们似乎都涉及大约30行代码,只是为了从字典中提取一行!

有人可以帮忙吗?谢谢!

iphone country abaddressbook abmultivalue street-address

4
推荐指数
1
解决办法
2265
查看次数

使用UITapGestureRecognizer显示/隐藏菜单

我试图找到一种很好的方式来点击显示/隐藏我的菜单,就像iBooks一样.我设置了UITapGestureRecognizer来执行此操作,但不幸的是,这意味着屏幕上的所有按钮都不起作用.我知道我可以使用

tapRecognizer.cancelsTouchesInView = NO;
Run Code Online (Sandbox Code Playgroud)

为了让触摸能够通过,但当然,这两件事都发生了,我无法取消菜单显示/隐藏.

有没有办法阻止UITapGestureRecognizer在某些按钮或动作上发生?或者是否有更好的方法来做到这一点?

非常感谢您提供的任何帮助!

:-Joe

objective-c uibutton ipad uigesturerecognizer ibooks

3
推荐指数
1
解决办法
1783
查看次数

如何在XCode中为不同版本的iPhone OS编码?

我似乎有一个错误,因为我正在使用-[AVAudioSession setActive:withFlags:error:]3.0 - 4.0.2的iPhone项目.所以我想我需要把其中一条#IF线放进去,所以我可以根据操作系统版本来做不同的事情......但是我找不到怎么做.

iphone xcode avaudioplayer ios

2
推荐指数
1
解决办法
211
查看次数

为什么UIFont systemFontOfSize:重量不会在iOS 8.0上崩溃?

对于冲突的编译器,我遇到了一个奇怪的问题,因为UIFont systemFontOfSize:weight据说只能从iOS 8.2获得.

在本地,我可以编译一个使用该功能的项目到运行iOS 8.0的iPhone 6上,它运行得很好.我也可以使用正确的结果编译到8.1模拟器,包括加权.

问题是我们正在使用Team City,并且该行不会使用iOS 8.0 SDK在服务器上编译.我知道解决方案是删除该行,但我想找出为什么它在本地编译期间没有捕获错误...该功能在iOS 8.2之前是否可用但是作为私有API?

teamcity sdk compiler-warnings ios8.2

2
推荐指数
1
解决办法
1335
查看次数

我需要在dealloc中发布IBOutlets吗?

我有一个View Controller作为带有两个IBOutlets的导航控制器堆栈的一部分.在viewDidUnload中我释放它们:

- (void)viewDidUnload
{
    self.myView1 = nil;
    self.myView2 = nil;
    [super viewDidUnload];
}
Run Code Online (Sandbox Code Playgroud)

但我还是有泄漏.所以我也在dealloc中为他们发布了释放消息:

- (void)dealloc
{
    [myView1 release];
    [myView2 release];

    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

这似乎可以清除内存泄漏.但是,我总是被告知我应该发布使用alloc,copy或new创建的ivars.所以我担心这两个版本就在这里.这是对还是错?有人可以向我解释一下,因为我不断收到相互矛盾的意见......谢谢!

memory-leaks objective-c uiviewcontroller ios

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

为什么我的应用程序没有获取Localizable.strings文件中的文本?

我正在尝试本地化我的iPhone应用程序,我已经尝试向谷歌寻求帮助并在这里查看,但我找不到任何我做错的事情.

我创建了一个Localizable.strings文件,目前只包含:

/* 
  Localizable.strings
  AppName

  Created by Joe on 25/10/2011.
  Copyright (c) 2011 xxx. All rights reserved.
*/

"DestinationHeader" = "I am going to";
Run Code Online (Sandbox Code Playgroud)

然后我转到XCode右侧的Localization选项卡,并在文件中添加了"English".现在该文件出现在捆绑包中的en.lproj文件夹中.

然后,在视图控制器中,我添加了以下行:

sectionTitle = NSLocalizedString(@"destinationHeader", nil);
Run Code Online (Sandbox Code Playgroud)

但所有似乎正在发生的事情是文本"destinationHeader"出现而不是"我要去".我显然做错了什么,有没有人有任何想法?

谢谢!

:-Joe

localization localizable.strings nslocalizedstring ios

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