Как сделать скриншот UITableView

Проблема состоит в том, если сделать скриншот UITableView (или UIScrollView), то область за пределами экрана будет белой.

- (UIImage *)makeScreenshot:(UITableView *)tableView
{

    UIGraphicsBeginImageContext(tableView.contentSize);

    [tableView.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return image;
}

Для того чтобы получить изображение целиком, нам нужно поменять размеры таблицы. А после сохранения скриншота восстановить их обратно.

- (UIImage *)makeScreenshot:(UITableView *)tableView
{

    UIGraphicsBeginImageContext(tableView.contentSize);

    CGPoint contentOffset = tableView.contentOffset;
    CGRect frame = tableView.frame;

    tableView.contentOffset = CGPointZero;
    tableView.frame = CGRectMake(0,
                                 0,
                                 tableView.contentSize.width,
                                 tableView.contentSize.height);

    [tableView.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    tableView.contentOffset = contentOffset;
    tableView.frame = frame;

    UIGraphicsEndImageContext();

    return image;

}

Чтобы сохранить скриншот в галерею, можно использовать UIActivityViewController. Этот контроллер позволяет сохранить изображение или выбрать любой удобный вариант поделиться изображением.

- (void)shareImage:(UIImage *)image
{

    UIActivityViewController *activity =
        [[UIActivityViewController alloc] initWithActivityItems:@[image]
                                          applicationActivities:nil];

    [self presentViewController:activity animated:YES completion:nil];
}

Используя эти две функции, можем легко делать скриншот и делиться им:

- (void)makeScreenshot
{
    UIImage *image = [self makeScreenshot:self.tableView];
    [self shareImage:image];
}

Как забрать картинки из iOS Simulator?

Выполняем в консоли:

$ xcrun simctl list devices
== Devices ==
-- iOS 7.0 --
    iPhone 4s (CC215EB6-329A-492B-8809-D53D6F257BBD) (Shutdown) (unavailable)
    ...
-- iOS 7.1 --
    iPhone 4s (6FDB1DE9-9080-4EFA-8EF5-25E18D2D2ACC) (Shutdown)
    ...
-- iOS 8.1 --
    iPhone 4s (098C278C-2BDA-4675-BB13-BF997D3C5B14) (Shutdown)
    iPhone 5 (E2D63FBA-A29C-4202-9D27-CD29DA723F42) (Booted)
    iPhone 5s (0091FF73-3B2D-4BFA-8B5E-222FFD0A2DA6) (Shutdown)

Получим список симуляторов с их UDID. Далее идем в нужным нам симулятор и забираем картинки.

Путь к галереи симулятора:

~/Library/Developer/CoreSimulator/Devices/<UDID>/data/Media/DCIM/100APPLE

Чтобы попасть в ~/Library через Finder нажимаем ⌘ + ⇧ + G.

Выше описанное работает для Xcode 6.


Опубликовано: Март 25, 2015 ~ UIKit, obj-c