Как снять с экрана iPhone весь вид, включая детали, за пределы экрана? - PullRequest
5 голосов
/ 24 февраля 2010

У меня есть приложение, которое выложено с использованием UITableView. Интерфейс занимает больше, чем просто экран, поэтому есть область, которую можно прокрутить. Я хотел бы, чтобы некоторые скриншоты всего вида (включая невидимую область) использовались для документации и получения отзывов от моего клиента.

Есть ли программный способ получить изображение всего вида? Я не думаю, что на устройстве был бы способ сделать это, но, возможно, есть.

Ответы [ 5 ]

6 голосов
/ 25 февраля 2010

Просто вставьте код, который я использовал в своем приложении. Рисует вид на изображение (потенциально масштабируемое). Может быть, вы могли бы программно прокрутить таблицу и сшить изображения в конце или что-то подобное:

+ (UIImage *)captureView: (UIView *)view inSize: (CGSize)size
{
    UIGraphicsBeginImageContext(size);
    CGSize viewSize = view.frame.size;
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextScaleCTM( context, size.width/viewSize.width, size.height/viewSize.height);

    [view.layer renderInContext: UIGraphicsGetCurrentContext()];

    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

Надеюсь, это поможет

4 голосов
/ 07 ноября 2011

Вы можете на самом деле прокрутить просмотр таблицы. Следующий код прекрасно работает в моем приложении. Но для создания скриншота может потребоваться белый цвет. Вы можете обратиться к этому , чтобы узнать, улучшился ли кто-либо.

//viewController is your UITableViewController
UIGraphicsBeginImageContext(viewController.tableView.contentSize);
[viewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
[viewController.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];

int rows = [viewController.tableView numberOfRowsInSection:0];
int numberofRowsInView = 7;
for (int i =0; i < rows/numberofRowsInView; i++) {
    [viewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(i+1)*numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
    [viewController.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];

}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
1 голос
/ 18 июня 2013

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

Хорошо работает с нижним колонтитулом и заголовком таблицы.

CGRect frame = _tableView.frame;
frame.size.height = _tableView.contentSize.height;//the most important line
_tableView.frame = frame;

UIGraphicsBeginImageContext(_tableView.bounds.size);
[_tableView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData * data = UIImagePNGRepresentation(image);
1 голос
/ 24 февраля 2010

Как сказал Jasarien , UITableView не имеет элементов вне экрана. Это просто иллюзия сцены, которая создает видимость единого длинного элемента.

Если вы хотите создать изображение длинной (то есть вне экрана) таблицы, вам следует сделать снимки экрана с таблицей в разных местах прокрутки, а затем Photoshop / GIMP / insert-graphics-app - снимки экрана в одну. длинный рисунок.

1 голос
/ 24 февраля 2010

При просмотре таблицы на iphone нет «дополнительной» области для прокрутки. Табличное представление размером с экран, и когда новые ячейки прокручиваются в поле зрения, они создаются по требованию, а старые ячейки, которые прокручиваются вне экрана, освобождаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...