小编mah*_*udz的帖子

鉴于一个观点,我如何获得它的viewController?

我有一个指针UIView.我如何访问它UIViewController[self superview]是另一个UIView,但不是UIViewController,对吧?

iphone debugging uiviewcontroller uiview ios

129
推荐指数
6
解决办法
11万
查看次数

什么是测试文件存在的快速方法?

我想快速检查我的iPhone应用程序的Documents目录(或任何路径)中是否存在文件.我可以枚举目录的文件,或者我可以尝试打开一个特定的文件.什么是最快的方式?我只需要知道文件是否存在或者是否存在.

iphone cocoa-touch file-manager nsfilemanager ios

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

UIScrollView按预期工作,但scrollRectToVisible:什么都不做

我以前用过UIScrollView,现在正在使用它,从来没有遇到过问题.我现在将它添加到一个旧的应用程序,虽然它按预期工作(我可以看看内容,用我的手指滚动,所有的边界和大小设置正确,所以内容中没有空白的空间,等等.),我只是无法scrollToRectVisible上班.我甚至简化了调用,以便它只移动到0,0位置:

 [scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES];
Run Code Online (Sandbox Code Playgroud)

或将其移至0,200:

 [scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES];
Run Code Online (Sandbox Code Playgroud)

我甚至做了一个快速的应用来测试这个,我可以scrollRectToVisible像我期望的那样去那里工作.但在我的旧应用程序中,我似乎无法做任何事情.

我可以使用scrollView滚动setContentOffset:,但这不是我想要的.

此scrollView及其内容由IB在nib中定义,并与IBOutlet一起使用.我在我的应用程序中使用的唯一代码来处理scrollView是

 [scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)];
Run Code Online (Sandbox Code Playgroud)

(我只对垂直滚动而不是水平感兴趣).

有没有人遇到这样的问题?

我比较了两个应用程序中的scrollView属性,它们是相同的.

附录:

我的scrollViews框架是:0.000000 0.000000 480.000000 179.000000

我的scrollViews contentSize是:0.000000 324.000000

它仍然像我想要滚动到的矩形已经可见,并且不需要滚动.不确定这是不是正在发生的事情.这只是最神奇的事情.似乎很容易解决这个问题......

附录#2:

这就是我没有做的事情scrollRectToVisible:

CGPoint point = myRect.origin;
if (![clefScrollView pointInside:point withEvent:nil]) {
    point.x = 0;
    if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height)
        point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height;
    [clefScrollView setContentOffset:point animated: YES];
}
Run Code Online (Sandbox Code Playgroud)

关于此scrollView的其他所有内容都按预期工作,但是scrollRectToVisible.为什么?!?任何疯狂的猜测?

iphone uiscrollview

61
推荐指数
3
解决办法
6万
查看次数

何时使用静态字符串与#define

关于什么时候最好使用我有点困惑:

static NSString *AppQuitGracefullyKey = @"AppQuitGracefully";
Run Code Online (Sandbox Code Playgroud)

代替

#define AppQuitGracefullyKey    @"AppQuitGracefully"
Run Code Online (Sandbox Code Playgroud)

我已经在C或C++中看到过这样的问题,我认为这里的不同之处在于,这是针对Objective C,利用一个对象,而在像iPhone这样的设备上,可能存在堆栈,代码空间或内存问题.我还没有掌握.

一种用法是:

appQuitGracefully =  [[NSUserDefaults standardUserDefaults] integerForKey: AppQuitGracefullyKey];
Run Code Online (Sandbox Code Playgroud)

或者只是风格问题?

谢谢.

xcode cocoa cocoa-touch objective-c

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

如何将CVPixelBuffer变成UIImage?

我在从CVPixelBuffer获取UIIMage时遇到一些问题.这就是我想要的:

CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(imageDataSampleBuffer);
CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, imageDataSampleBuffer, kCMAttachmentMode_ShouldPropagate);
CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer options:(NSDictionary *)attachments];
if (attachments)
    CFRelease(attachments);
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);
if (width && height) { // test to make sure we have valid dimensions
    UIImage *image = [[UIImage alloc] initWithCIImage:ciImage];

    UIImageView *lv = [[UIImageView alloc] initWithFrame:self.view.frame];
    lv.contentMode = UIViewContentModeScaleAspectFill;
    self.lockedView = lv;
    [lv release];
    self.lockedView.image = image;
    [image release];
}
[ciImage release];
Run Code Online (Sandbox Code Playgroud)

height并且width都正确设置为相机的分辨率. image是创建但我似乎是黑色(或可能是透明的?).我不太明白问题出在哪里.任何想法,将不胜感激.

avfoundation uiimage ios

36
推荐指数
5
解决办法
3万
查看次数

[NSThread detachNewThreadSelector:]和-performSelectorInBackground之间的区别

我一直在使用-performSelectorInBackground我的许多应用程序,有点不知道-detachNewThreadSelector.现在我想知道两者之间的差异.它们几乎可以互换,还是存在一个优于另一个的差异和地方?谢谢!

iphone cocoa-touch

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

用它的孩子渲染UIView

我有一个UIView图像和一些按钮作为其子视图.我想用它renderInContext或其他方法得到它的"快照"图像.

[clefView.layer renderInContext:mainViewContentContext];
Run Code Online (Sandbox Code Playgroud)

如果我将它传递给我UIView(如上所述),那么我得到一个空白的位图.没有子项被渲染到位图中.

如果我传递了作为图像的子视图,那么我得到一个该位图的图像,并且,毫不奇怪,没有它的兄弟(按钮).

我有点希望renderInContext将图像和所有可见的孩子都渲染成位图.有没有人有任何想法如何做到这一点?

iphone rendering uiview

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

在智能手机上音符识别音符

有限的资源,如较慢的CPU,代码大小和RAM,如何最好地检测音符的音高,类似于电子或软件调谐器会做什么?

我应该使用:

  • 吻FFT
  • FFTW
  • 离散小波变换
  • 自相关
  • 零交叉分析
  • 八度间隔滤波器

其他?

简而言之,我要做的是识别单个音符,在中间C到两个八度音程之上的两个八度音阶,在任何(合理的)乐器上演奏.我希望在半音的20%范围内 - 换句话说,如果用户播放太平或太尖锐,我需要区分它.但是,我不需要调整所需的准确度.

audio signal-processing fft pitch-tracking

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

如何在UIButton子类中重写-drawrect?

HI.我需要在自定义按钮上写一些文字.所以我将UIButton子类化了.在笔直,我写了我需要的文字.问题是文本最终在按钮下面.在我写完文本之后,UIButton的画面继续前进,并在我之上.

我甚至没有打电话给[super drawrect:rect],即使我在做绘画之前还在期待它.似乎无论如何都会调用UIButton的drawrect.

有任何想法吗?谢谢.

iphone uibutton

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

AVAudioRecorder不会创建可以打开和播放的.m4a文件

我正在尝试修改可以将音频文件(安全/加密)发送到其他iOS设备的iOS应用程序.它使用AVAudioRecorder录制音频文件,并使用AVAudioPlayer播放任何收到的音频文件.

我现在正在尝试修改应用程序以创建和发送与Android兼容的文件.我将现有的AVAudioRecorder代码修改为:

[settings setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitRateKey];
[settings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[settings setValue:[NSNumber numberWithFloat:48000.0] forKey:AVSampleRateKey];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dirPath = [paths objectAtIndex:0];

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH-mm"];

NSString *filename = [NSString stringWithFormat:@"%@.aac", [format stringFromDate:NSDate.date]];
Run Code Online (Sandbox Code Playgroud)

由此创建的文件可以在Mac上,iOS设备上播放,但不能在Android设备上播放.如果手动将文件扩展名更改为以".m4a"结尾,则该文件将在Android上播放.

(".aac"格式的优点是旧版本的应用程序可以接收这些文件并播放它们 - 我保持向后兼容性.)

所以我做了这个改变:

NSString *filename = [NSString stringWithFormat:@"%@.m4a", [format stringFromDate:NSDate.date]];
Run Code Online (Sandbox Code Playgroud)

但是,生成的文件(在没有AVAudioRecorder错误的情况下创建)无法在Mac上或iOS设备上播放.而我正在等待它是否适用于Android.

当AVAudioPlayer尝试打开该文件时,它会输出:

错误域= NSOSStatusErrorDomain代码= 1685348671"操作无法完成.(OSStatus错误1685348671.)"代码1685348671 - >"dta?":文件格式错误,不是其类型的音频文件的有效实例,或者未被识别为音频文件.

仅仅将文件重命名为".aac"并不会改变它无法加载到Mac或iOS上的任何内容的事实.

现在,似乎最好的解决方案是创建一个".aac"文件,然后让Android端用".m4a"替换".aac"并尝试播放它.

问题1:有谁知道为什么更改文件扩展名会导致AVAudioPLayer失败?顺便说一句,我上面创建的".m4a"文件无法用我在Mac上的任何东西打开,所以我无法判断问题是文件格式还是iOS或Mac无法读取此文件类型.

对于任何好奇的人,我把AVAudioRecorder的".aac"和".m4a"文件的副本放在这里:

https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2013-24.m4a https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2010-11.aac

问题2:当我将AVAudioRecorder设置为一个通道时,生成的文件是立体声.为什么?(至少这是VLC对元数据的说法)

问题3:无论如何为无损编码指定AAC-LC?或者,如果我从AVAudioRecorder转移到较低级别的API,我是否也可以这样做?

aac m4a avaudiorecorder ios

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