小编Lut*_*ker的帖子

UIToolbar中的UISegmentedControl颜色

我的问题围绕着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具有黑色半透明样式 - 在选定和未选定的段之间保持明显的区别.

iphone uisegmentedcontrol uitoolbar

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

Xcode如何决定首先显示哪个XIB

当我在Xcode中创建一个新的cocoa项目时,它会创建一个带有Window的MainMenu.xib文件.我想将窗口分成MainWindow.xib并将其显示为主窗口 - 我该怎么做?

如果我创建一个基于'文档'的应用程序 - 我看到两个xib(MainMenu.xib和MyDocument.xib),我注意到MyDocument.xib立即显示 - 但我不明白它在哪里被识别.似乎没有明确的代码,我不知道在哪里查看plists.

如果我创建一个新文档,如何将其作为启动应用程序时显示的主窗口?

macos cocoa xib

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

在iPhone上进行FFT以忽略背景噪音并找到较低的音高

我已经为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

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

通用应用程序的命名约定

我正在编写一个通用的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通用应用程序中,类似这样的类的常规约定是什么?或者我(希望)错过了能够避免这种必要性的东西?

xcode objective-c naming-conventions universal-binary ios

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

标准文件

我正在为一个大约15名开发人员的团队编写一份编码标准文档,每年项目负载10到15个项目.在其他部分(我可能会在这里发布)中,我正在编写一个关于代码格式的部分.首先,我认为无论出于何种原因,我们建立一些基本的,一致的代码格式化/命名标准是明智的.

我看过这个团队过去3年里写的大约10个项目,显然我发现了各种各样的风格.承包商有时进出,有时甚至是团队规模的两倍.

我正在寻找一些代码格式和命名标准的建议,这些建议确实得到了回报......但这也可以证明是合理的.我认为一致性和共享模式对于使代码更易于维护还有很长的路要走......但是,在定义标准时我还应该考虑其他事项吗?

  • 你如何排队括号?在处理类,方法,尝试catch块,switch语句,if else块等时,是否遵循相同的括号指南?

  • 你是否排列了列上的字段?你用下划线表示/前缀私有变量吗?您是否遵循任何命名约定,以便更容易在文件中查找详细信息?你如何订购你班级的成员?

如何建议命名空间,打包或源代码文件夹/组织标准?我倾向于从以下内容开始:

<com|org|...>.<company>.<app>.<layer>.<function>.ClassName
Run Code Online (Sandbox Code Playgroud)

我很想知道是否还有其他更为公认的做法,而不是我习以为常的做法 - 在我冒昧地指示这些标准之前.已经在线发布的标准链接也很棒 - 即使我已经完成了一些.

coding-style

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

如何从父XIB引用XIB文件

如果我在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)中完全执行此操作.

xcode cocoa interface-builder xib ios

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

Cocoa 单例和协议

我想定义一个协议并创建一种简单、标准的方法来获取所述协议的“默认”共享实现 - 单例样式。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 的类一样。

cocoa singleton objective-c factory-pattern ios

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

如何创建具有透明背景的UIImage

我正在为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'创建第二个图像 - 屏蔽背景.

我有没有办法首先"绘制"透明背景?

uitableview uiimage cgcontext ios

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

Win32 CreatePatternBrush

MSDN为CreatePatternBrush显示以下内容:

您可以使用DeleteObject函数删除模式画笔而不影响关联的位图.因此,您可以使用此位图创建任意数量的图案画笔.

我的问题恰恰相反.如果HBRUSH存在很长时间,我可以在创建画笔后立即删除HBITMAP吗?IE:HBRUSH是否存储了自己的HBITMAP副本?

在这种情况下,我希望HBRUSH具有对象范围,而HBITMAP具有方法范围(创建HBRUSH的方法).

winapi gdi

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

NSFetchedResultsController不更新UITableView的节索引

我正在使用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中的新部分在物理上可见(或删除),但部分索引未更新.

我错过了什么吗?

iphone core-data uitableview nsfetchedresultscontroller

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