[背景:iOS 7,Xcode 5,两者都是截至2014年2月的最新版本.测试数据是在iPhone 5(真实设备,非模拟器)上除了基本联系信息之外还有多个电话号码和多个地址的地址簿条目]
我的目标是使用AddressBookUI方法允许用户指定联系人,然后使用各种字段(地址,电话号码等)填充我的代码中的GUI.这ABPeoplePickerNavigationController是允许用户按名称选择联系人的标准机制.这样做会导致调用此委托方法:
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
Run Code Online (Sandbox Code Playgroud)
但是,如果我此时检查人员记录,则没有任何多值字段具有任何数据.所以我提取了RecordID,检索到了,结果ABRecordRef也没有填充多值字段.
如果我YES从委托方法返回,则会向用户显示另一个显示联系人详细信息的UI.触摸任何字段都会导致此委托方法调用
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
Run Code Online (Sandbox Code Playgroud)
并且ABRecordRef填写了所有多值字段.
我找不到有关延迟加载的记录的任何信息,或者存在所需的延迟或权限问题,这会阻止字段被填充.而我用来检查记录的代码是一种方法,所以在第二个实例中找到值的完全相同的代码无法在第一个实例中找到它.
有关可能发生的事情的任何建议,或者如何在不向用户显示第二个UI的情况下检索完整记录?
我正在使用Apple的QuickContacts示例代码.以下是我所做的补充和更改.
+(NSMutableDictionary *)convertABRecordRef:(ABRecordRef)person
{
// Initialize a mutable dictionary and give it initial values.
NSMutableDictionary *contactInfoDict = [[NSMutableDictionary alloc] initWithCapacity:12];
// Use a general Core Foundation object.
CFTypeRef generalCFObject = ABRecordCopyValue(person, kABPersonFirstNameProperty);
ABRecordID foundId = ABRecordGetRecordID(person);
NSNumber *personIDNum = [NSNumber numberWithInteger:foundId];
[contactInfoDict setObject:personIDNum forKey:@"recordID"];
// Get the first name.
if …Run Code Online (Sandbox Code Playgroud) 我的目标是采取这样的模式
并沿圆形路径重复绘制,以产生类似于此图像的内容:
我在其他问题中找到了几个代码示例,并在此处找到了完整的演示项目,但结果如下:

我认为这两个图像之间的区别是显而易见的,但我发现很难描述(原谅我缺乏图形词汇).结果似乎是没有所需的图案旋转/变形的平铺.我认为我可以忍受缺乏变形,但旋转是关键.我认为也许可以/应该修改绘制回调以包含旋转,但是无法弄清楚如何在回调点检索/确定角度.
我考虑过一种方法,我手动变形/旋转图像并围绕中心点绘制几次以达到我想要的效果,但我相信CoreGraphics可以更高效率和更少的代码来实现.
任何关于如何实现我想要的结果的建议将不胜感激.
以下是ChalkCircle项目的相关代码:
const float kPatternWidth = 8;
const float kPatternHeight = 8;
void DrawPatternCellCallback(void *info, CGContextRef cgContext)
{
UIImage *patternImage = [UIImage imageNamed:@"chalk_brush.png"];
CGContextDrawImage(cgContext, CGRectMake(0, 0, kPatternWidth, kPatternHeight), patternImage.CGImage);
}
- (void)drawRect:(CGRect)rect {
float startDeg = 0; // where to start drawing
float endDeg = 360; // where to stop drawing
int x = self.center.x;
int y = self.center.y;
int radius = (self.bounds.size.width > self.bounds.size.height ? self.bounds.size.height : self.bounds.size.width) / 2 …Run Code Online (Sandbox Code Playgroud) 我发布了这个问题(连同答案),以便其他人可以从一个简洁的技术中受益,我已经发展到让模块自动检测(和响应)iOS应用程序状态更改.(格式化)博客讨论在这里我的博客
iphone automation background uiapplicationdelegate cocoa-design-patterns