4ma*_*oud 9 ios uiactivityviewcontroller
我知道我可以将文本,URL,图像等内容添加到UIActivityViewController中,但是如何使用我的位置缩略图添加我当前的位置,如下面显示的推文?换句话说,如何在UIActivityViewController中共享坐标"纬度,经度"?
谢谢

我有一个完整的代码示例和所有重要的类/方法来做到这一点.我知道答案很晚,但这有助于将来的某些人:
- (void)shareTab
{
PFGeoPoint *geoPoint = self.vidgeoObject[kParseLocation];
NSString *coordinates = [NSString stringWithFormat:@"http://maps.apple.com/maps?q=%f,%f", geoPoint.latitude, geoPoint.longitude];
CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:geoPoint.latitude longitude:geoPoint.longitude];
CLGeocoder *geocoder;
geocoder = [[CLGeocoder alloc]init];
[geocoder reverseGeocodeLocation:userLocation completionHandler:^(NSArray *placemarks, NSError *error)
{
CLPlacemark *rootPlacemark = placemarks[0];
MKPlacemark *evolvedPlacemark = [[MKPlacemark alloc]initWithPlacemark:rootPlacemark];
ABRecordRef persona = ABPersonCreate();
ABRecordSetValue(persona, kABPersonFirstNameProperty, (__bridge CFTypeRef)(evolvedPlacemark.name), nil);
ABMutableMultiValueRef multiHome = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
bool didAddHome = ABMultiValueAddValueAndLabel(multiHome, (__bridge CFTypeRef)(evolvedPlacemark.addressDictionary), kABHomeLabel, NULL);
if(didAddHome)
{
ABRecordSetValue(persona, kABPersonAddressProperty, multiHome, NULL);
NSLog(@"Address saved.");
}
NSArray *individual = [[NSArray alloc]initWithObjects:(__bridge id)(persona), nil];
CFArrayRef arrayRef = (__bridge CFArrayRef)individual;
NSData *vcards = (__bridge NSData *)ABPersonCreateVCardRepresentationWithPeople(arrayRef);
NSString* vcardString;
vcardString = [[NSString alloc] initWithData:vcards encoding:NSASCIIStringEncoding];
NSLog(@"%@",vcardString);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"pin.loc.vcf"];
[vcardString writeToFile:filePath
atomically:YES encoding:NSUTF8StringEncoding error:&error];
NSURL *url = [NSURL fileURLWithPath:filePath];
NSLog(@"url> %@ ", [url absoluteString]);
// Share Code //
NSArray *itemsToShare = [[NSArray alloc] initWithObjects: url, nil] ;
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];
activityVC.excludedActivityTypes = @[UIActivityTypePrint,
UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypePostToWeibo];
if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)
{
[self presentViewController:activityVC animated:YES completion:nil];
} else
{
popControl = [[UIPopoverController alloc] initWithContentViewController:activityVC];
}
}];
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个Swift替代方法,将vCard文件保存到缓存目录,您可以在以下位置检出:https : //gist.github.com/naturaln0va/e1fed3f1d32ecf951aac。
vCard的结构类似于whoKnows的回答。
let vCardString = [
"BEGIN:VCARD",
"VERSION:3.0",
"N:;Shared Location;;;",
"FN:Shared Location",
"item1.URL;type=pref:http://maps.apple.com/?ll=\(coordinate.latitude),\(coordinate.longitude)",
"item1.X-ABLabel:map url",
"END:VCARD"
].joinWithSeparator("\n")
Run Code Online (Sandbox Code Playgroud)
要共享这样的位置,您需要为该位置创建一个 vcf 文件...我只是花了一整天的时间尝试做同样的事情,并到处收集信息,设法发现苹果在地图中使用像这样的文件名来做到这一点“你的地址share.loc.vcf”
您基本上需要使用 CLLocationManager 获取当前位置,然后使用 CLGeocoder 从通过位置管理器检索的位置获取地址。
CLGeocoder 为您提供一个 CLPlacemark,您可以将其制作成 MKPlacemark。
您将使用存储在其中的地址字典
有了这些信息,您可以使用 ABPersonCreate 创建 ABRecordRef,在其中存储该位置的所有数据,然后使用 ABPersonCreateVCardRepresentationWithPeople 获取 vcd 数据
您还需要添加地图 url,只需从maps.app 与自己共享一个位置,然后查看 .vcf 中的 url 结构...
将该数据转换为 NSString 并保存到文件。
为该文件创建一个 NSURL 并将其与 UIActivityViewController 共享...
相当乏味的工作,但它对我来说确实非常有用......
| 归档时间: |
|
| 查看次数: |
7409 次 |
| 最近记录: |