How to share my current location to UIActivityViewController?

前端 未结 8 1384
别那么骄傲
别那么骄傲 2020-12-05 12:32

I know i can add things like text, URL, images to UIActivityViewController , but how to add my current location with a thumbnail of my location like in the tweet shown below

8条回答
  •  感情败类
    2020-12-05 12:50

    I have a complete example of code and all the important classes/methods to do this. I know the answer is very late, but this may help someone in the future:

    - (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];
            }
    
        }];
    
    }
    

提交回复
热议问题