我的问题围绕着UINavigationBar与UIToolbar上的UISegmentedController的区别.如果我将UISegmentedControl放入导航栏,如下所示:
navigationBar.barStyle = UIBarStyleBlackTranslucent;
Run Code Online (Sandbox Code Playgroud)
一切都很好.UISegmentedControl使用稍暗的黑色标识所选选项.但是,如果我将UISegmentedControl放到UIToolbar上,它就不会从工具栏中获取颜色或半透明度.如果我手动设置tintColor,则UISegmentedControl不再区分selected和unselected.
不可否认,在放入UIToolbar之前,必须将UISegmentedControl包装在UIBarButtonItem中.我想知道这是否是UISegmentedControl看起来不正确的原因(半透明黑色背景上的蓝色).
toolbar.barStyle = UIBarStyleBlackTranslucent;
UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
NSArray *toolbarItems = [[NSArray alloc] initWithObjects:item,nil];
toolbar.items = toolbarItems;
Run Code Online (Sandbox Code Playgroud)
当然,由于我使用的是内部导航和控制器工具栏,但我的代码并不完整,但一般逻辑是相同的.我不确定如何使UIToolbar上的UISegmentedControl具有黑色半透明样式 - 在选定和未选定的段之间保持明显的区别.
当我在Xcode中创建一个新的cocoa项目时,它会创建一个带有Window的MainMenu.xib文件.我想将窗口分成MainWindow.xib并将其显示为主窗口 - 我该怎么做?
如果我创建一个基于'文档'的应用程序 - 我看到两个xib(MainMenu.xib和MyDocument.xib),我注意到MyDocument.xib立即显示 - 但我不明白它在哪里被识别.似乎没有明确的代码,我不知道在哪里查看plists.
如果我创建一个新文档,如何将其作为启动应用程序时显示的主窗口?
我已经为iPhone 实施了Demetri的Pitch Detector项目,并遇到了两个问题.1)任何类型的背景噪声发送频率读取香蕉和2)较低频率的声音没有正确调整.我试着调整我的吉他,而更高的琴弦工作 - 调谐器无法正确辨别低音.
音高检测代码位于RIOInterface.mm中,就像这样......
// get the data
AudioUnitRender(...);
// convert int16 to float
Convert(...);
// divide the signal into even-odd configuration
vDSP_ctoz((COMPLEX*)outputBuffer, 2, &A, 1, nOver2);
// apply the fft
vDSP_fft_zrip(fftSetup, &A, stride, log2n, FFT_FORWARD);
// convert split real form to split vector
vDSP_ztoc(&A, 1, (COMPLEX *)outputBuffer, 2, nOver2);
Run Code Online (Sandbox Code Playgroud)
然后Demetri继续确定"主导"频率如下:
float dominantFrequency = 0;
int bin = -1;
for (int i=0; i<n; i+=2) {
float curFreq = MagnitudeSquared(outputBuffer[i], outputBuffer[i+1]);
if (curFreq > dominantFrequency) {
dominantFrequency …Run Code Online (Sandbox Code Playgroud) iphone signal-processing fft pitch-tracking accelerate-framework
我正在编写一个通用的iOS应用程序(iPad和iPhone),并且发现自己拥有大量长名称,无法在两个应用程序之间共享:
FamilyViewController_iPhone.h/m
FamilyViewControllerA_iPad.h/m
DetailViewControllerB_iPhone.h/m
DetailViewControllerB_iPad.h/m
Run Code Online (Sandbox Code Playgroud)
同样,这些人内部的类具有完整的名称(包括设备),主要是为了使Interface Builder可以轻松使用它们.
我考虑过像AControllerA.h和BControllerA.h这样的东西,其中A = iPhone和B = iPad,但也没有对这个选项感到兴奋.
在iOS通用应用程序中,类似这样的类的常规约定是什么?或者我(希望)错过了能够避免这种必要性的东西?
我正在为一个大约15名开发人员的团队编写一份编码标准文档,每年项目负载10到15个项目.在其他部分(我可能会在这里发布)中,我正在编写一个关于代码格式的部分.首先,我认为无论出于何种原因,我们建立一些基本的,一致的代码格式化/命名标准是明智的.
我看过这个团队过去3年里写的大约10个项目,显然我发现了各种各样的风格.承包商有时进出,有时甚至是团队规模的两倍.
我正在寻找一些代码格式和命名标准的建议,这些建议确实得到了回报......但这也可以证明是合理的.我认为一致性和共享模式对于使代码更易于维护还有很长的路要走......但是,在定义标准时我还应该考虑其他事项吗?
你如何排队括号?在处理类,方法,尝试catch块,switch语句,if else块等时,是否遵循相同的括号指南?
你是否排列了列上的字段?你用下划线表示/前缀私有变量吗?您是否遵循任何命名约定,以便更容易在文件中查找详细信息?你如何订购你班级的成员?
如何建议命名空间,打包或源代码文件夹/组织标准?我倾向于从以下内容开始:
<com|org|...>.<company>.<app>.<layer>.<function>.ClassName
Run Code Online (Sandbox Code Playgroud)
我很想知道是否还有其他更为公认的做法,而不是我习以为常的做法 - 在我冒昧地指示这些标准之前.已经在线发布的标准链接也很棒 - 即使我已经完成了一些.
如果我在ChildView.xib中创建自定义UIView - 我如何从MainWindow.xib引用它?
我试图将UIView拖到MainWindow.xib并将其与同一个ChildView类关联.我从ChildWindow.xib和ChildView.xib中使ChildView.xib的所有者成为ViewController,我将childView IBOutlet连接到视图,但是当我启动应用程序时,ChildView.xib中的视图不会自动加载.
这可能吗?在基本级别,我想我问的是如何将UIViews从单独的XIB文件连接到其他一些XIB中的IBOutlet引用...如MainWindow.xib.
FWIW,我知道如何在代码中执行此操作(使用NSBundle手动实例化)但在这种情况下,我想知道如何在IB(Interface Builder)中完全执行此操作.
我想定义一个协议并创建一种简单、标准的方法来获取所述协议的“默认”共享实现 - 单例样式。Cocoa 遵循以下模式:
[NSUserDefaults standardUserDefaults]
[NSNotificationCenter defaultCenter]
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下,它们在对象层次结构的底部都有@interfaces。我正在努力解决如何使用@protocols 来做到这一点。显然,我可以创建一个具有空或简单方法实现的类 - 但实际上,我想要的是层次结构底部的 @protocol。我尝试过类似的事情:
@protocol ConfigurationManager <NSObject>
//...
@interface ConfigurationManagerFactory : NSObject
+ (id<ConfigurationManager>)sharedConfiguration;
@end
// ...
id<ConfigurationManger> config = [ConfigurationManagerFactory sharedConfiguration];
[config ...];
Run Code Online (Sandbox Code Playgroud)
它有效 - 但我总是必须解释如何使用它以及为什么我这样做。有没有一种方法可以符合 Cocoa 的语法(调用约定),同时仍然利用 @protocols 的价值?
顺便说一句,我是否有理由不想像这样使用@protocols?实现 @interface 仍然可以利用类别和替代实现等 - 就像实例化 NSString 通常会留下一个扩展 NSString 的类一样。
我正在为UITableViewCell上的'UIImageView'属性动态创建(绘制我自己的自定义)UIImage.
当用户选择tableView单元格时,单元格背景变为蓝色,但我的自定义UIImage背景却没有 - 它仍然是白色的(因此很清楚我有一张图像坐在那里).我尝试了各种绘图方法
// when I create the cell
cell.imageView.backgroundColor = [UIColor clearColor];
cell.imageView.opaque = NO;
// 1. when I create the UIImage - clearColor background
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillRect(context, rect);
// 2. when I create the UIImage - clear background
CGContextClearRect(context, rect);
Run Code Online (Sandbox Code Playgroud)
但在这两种方法中,背景都是黑色的.唯一可行的方法是完成创建图像,然后应用基于第一个图像的'CGImageCreateWithMaskingColors'创建第二个图像 - 屏蔽背景.
我有没有办法首先"绘制"透明背景?
MSDN为CreatePatternBrush显示以下内容:
您可以使用DeleteObject函数删除模式画笔而不影响关联的位图.因此,您可以使用此位图创建任意数量的图案画笔.
我的问题恰恰相反.如果HBRUSH存在很长时间,我可以在创建画笔后立即删除HBITMAP吗?IE:HBRUSH是否存储了自己的HBITMAP副本?
在这种情况下,我希望HBRUSH具有对象范围,而HBITMAP具有方法范围(创建HBRUSH的方法).
我正在使用NSFetchedResultsController填充UITableViewController,其中结果创建了用于填充节标题和节索引的节.我使用以下方法填充节索引:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return [fetchedResultsController_ sectionIndexTitles];
}
Run Code Online (Sandbox Code Playgroud)
现在我遇到了一个问题.当我向与NSFetchedResultsController关联的NSManagedObjectContext添加新元素时,新元素将被保存并在UITableView中适当地显示为单元格...除了一件事.如果新元素创建了一个新的SECTION,则除了弹出UINavigationController的堆栈并重新加载UITableViewController之外,新的section索引不会显示在右边距中.
我已经符合NSFetchedResultsControllerDelegate的接口并手动调用
[self.tableView reloadSectionIndexTitles];
Run Code Online (Sandbox Code Playgroud)
在这两个委托方法的最后:
controller:didChangeSection...
controller:didChangeObject...
Run Code Online (Sandbox Code Playgroud)
虽然我可以调试并跟踪执行到方法中并查看调用的重载调用,但UITableView的节索引从不反映节的更改.
同样,数据显示 - UITableView中的新部分在物理上可见(或删除),但部分索引未更新.
我错过了什么吗?