Получение измененного скриншота из UIView - PullRequest
2 голосов
/ 06 января 2011

Я пытаюсь сделать снимок экрана UIView, уменьшенного до размера миниатюры, с помощью следующего кода,

    UIGraphicsBeginImageContext(size);
    [canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
    result = [UIGraphicsGetImageFromCurrentImageContext() retain];
    UIGraphicsEndImageContext();

Приведенный выше код просто возьмет верхнюю левую часть представления в исходном неизмененном размере.

Я уверен, что делал это раньше, но я просто не могу заставить его работать. Кто-нибудь знает, что здесь?

Ответы [ 2 ]

7 голосов
/ 07 января 2011

Предположим, что у вас есть CGSize origSize, который является исходным размером (например, 768x1024), и CGSize size, который является требуемым размером, это можно сделать так:

CGFloat scaleX = size.width / origSize.width;
CGFloat scaleY = size.height / origSize.height;
UIGraphicsBeginImageContextWithOptions(origSize, NO, scaleX > scaleY ? scaleY : scaleX);
[canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Обратите внимание, что мы используем origSize в начальном контексте, а не size. Масштаб также влияет на размер.

Обновление (примерно через год): обратите внимание, что этот метод мешает (или мешает) преобразованиям на моментальном снимке UIView. Если вышеприведенное не работает, и вы выполняете масштабное преобразование в представлении (или его слое), вы можете использовать следующее решение: Как уменьшить UIImage и сделать его одновременно четким и резким размыто?

0 голосов
/ 06 января 2015

Я считаю, что это решение создает миниатюры нужного размера.

    let thumbRect = CGRect(x: 0, y: 0, width: 512, height: 666)
    UIGraphicsBeginImageContext(thumbSize)
    let context = UIGraphicsGetCurrentContext()     
    self.view.frame = thumbRect
    self.view.layer.renderInContext(context)
    thumbImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

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

...