我有一个音频文件,当用户滚动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:因为没有延迟选项.
有任何想法吗?他们为什么要这么难以淡出声音呢?呻吟
谢谢!
我在第一个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
我有两个旋转动画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) 我正在尝试将音频文件加载到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
有什么想法我可能会遇到这个问题吗?
谢谢!
我无法理解如何访问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行代码,只是为了从字典中提取一行!
有人可以帮忙吗?谢谢!
我试图找到一种很好的方式来点击显示/隐藏我的菜单,就像iBooks一样.我设置了UITapGestureRecognizer来执行此操作,但不幸的是,这意味着屏幕上的所有按钮都不起作用.我知道我可以使用
tapRecognizer.cancelsTouchesInView = NO;
Run Code Online (Sandbox Code Playgroud)
为了让触摸能够通过,但当然,这两件事都发生了,我无法取消菜单显示/隐藏.
有没有办法阻止UITapGestureRecognizer在某些按钮或动作上发生?或者是否有更好的方法来做到这一点?
非常感谢您提供的任何帮助!
:-Joe
我似乎有一个错误,因为我正在使用-[AVAudioSession setActive:withFlags:error:]3.0 - 4.0.2的iPhone项目.所以我想我需要把其中一条#IF线放进去,所以我可以根据操作系统版本来做不同的事情......但是我找不到怎么做.
对于冲突的编译器,我遇到了一个奇怪的问题,因为UIFont systemFontOfSize:weight据说只能从iOS 8.2获得.
在本地,我可以编译一个使用该功能的项目到运行iOS 8.0的iPhone 6上,它运行得很好.我也可以使用正确的结果编译到8.1模拟器,包括加权.
问题是我们正在使用Team City,并且该行不会使用iOS 8.0 SDK在服务器上编译.我知道解决方案是删除该行,但我想找出为什么它在本地编译期间没有捕获错误...该功能在iOS 8.2之前是否可用但是作为私有API?
我有一个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.所以我担心这两个版本就在这里.这是对还是错?有人可以向我解释一下,因为我不断收到相互矛盾的意见......谢谢!
我正在尝试本地化我的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
ios ×6
objective-c ×6
ipad ×5
iphone ×2
abmultivalue ×1
caanimation ×1
country ×1
ibooks ×1
ios8.2 ×1
localization ×1
memory-leaks ×1
nsthread ×1
nsurl ×1
sdk ×1
statusbar ×1
teamcity ×1
uibutton ×1
viewdidload ×1
xcode ×1