我有一个指针UIView.我如何访问它UIViewController? [self superview]是另一个UIView,但不是UIViewController,对吧?
我想快速检查我的iPhone应用程序的Documents目录(或任何路径)中是否存在文件.我可以枚举目录的文件,或者我可以尝试打开一个特定的文件.什么是最快的方式?我只需要知道文件是否存在或者是否存在.
我以前用过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.为什么?!?任何疯狂的猜测?
关于什么时候最好使用我有点困惑:
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)
或者只是风格问题?
谢谢.
我在从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是创建但我似乎是黑色(或可能是透明的?).我不太明白问题出在哪里.任何想法,将不胜感激.
我一直在使用-performSelectorInBackground我的许多应用程序,有点不知道-detachNewThreadSelector.现在我想知道两者之间的差异.它们几乎可以互换,还是存在一个优于另一个的差异和地方?谢谢!
我有一个UIView图像和一些按钮作为其子视图.我想用它renderInContext或其他方法得到它的"快照"图像.
[clefView.layer renderInContext:mainViewContentContext];
Run Code Online (Sandbox Code Playgroud)
如果我将它传递给我UIView(如上所述),那么我得到一个空白的位图.没有子项被渲染到位图中.
如果我传递了作为图像的子视图,那么我得到一个该位图的图像,并且,毫不奇怪,没有它的兄弟(按钮).
我有点希望renderInContext将图像和所有可见的孩子都渲染成位图.有没有人有任何想法如何做到这一点?
有限的资源,如较慢的CPU,代码大小和RAM,如何最好地检测音符的音高,类似于电子或软件调谐器会做什么?
我应该使用:
其他?
简而言之,我要做的是识别单个音符,在中间C到两个八度音程之上的两个八度音阶,在任何(合理的)乐器上演奏.我希望在半音的20%范围内 - 换句话说,如果用户播放太平或太尖锐,我需要区分它.但是,我不需要调整所需的准确度.
HI.我需要在自定义按钮上写一些文字.所以我将UIButton子类化了.在笔直,我写了我需要的文字.问题是文本最终在按钮下面.在我写完文本之后,UIButton的画面继续前进,并在我之上.
我甚至没有打电话给[super drawrect:rect],即使我在做绘画之前还在期待它.似乎无论如何都会调用UIButton的drawrect.
有任何想法吗?谢谢.
我正在尝试修改可以将音频文件(安全/加密)发送到其他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,我是否也可以这样做?
iphone ×6
ios ×4
cocoa-touch ×3
uiview ×2
aac ×1
audio ×1
avfoundation ×1
cocoa ×1
debugging ×1
fft ×1
file-manager ×1
m4a ×1
objective-c ×1
rendering ×1
uibutton ×1
uiimage ×1
uiscrollview ×1
xcode ×1