Подтвердить что ты не робот

Скриншот Только часть экрана - Swift

Я использую этот код Swift, чтобы сделать снимок экрана моего приложения:

UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

Как я могу сделать снимок экрана только на части экрана, а не на всех, как я здесь?

4b9b3361

Ответ 1

Например, если вы хотите сделать снимок экрана прямоугольника UIView в позиции (50,50) с высотой (100,150).

Сначала установите контекст изображения в размер прямоугольника. Это задает размер изображения.

UIGraphicsBeginImageContextWithOptions(CGSizeMake(100,150), false, 0);

Теперь нарисуйте представление в этом контексте таким образом, чтобы видимая часть снимка экрана начиналась с (50,50)

self.view.drawViewHierarchyInRect(CGRectMake(-50,-50,view.bounds.size.width,view.bounds.size.height) afterScreenUpdates: true)

Это снимает снимок экрана (100,150), потому что мы устанавливаем размер нашего context. Теперь возьмите UIImage из этого.

var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();

Ответ 2

Я думаю, что это лучший ответ, чтобы сделать снимок части экрана:

func screenShot() {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.frame.size.width*0.99,self.frame.size.height*0.70), false, 0)
    var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
    self.view?.drawViewHierarchyInRect(CGRectMake(-01, -01, self.frame.size.width, self.frame.size.height), afterScreenUpdates: true)
    var screenShot  = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
}

Ответ 3

Чтобы снять снимок, содержащий UIVisualEffect (Blur/Vibrancy), см. мое решение здесь: fooobar.com/questions/414612/...

Ответ 4

для создания снимка по области другого UIView

// viewObject: UIView linked from storyboard
var bounds= CGRect(x: -viewObject.frame.minX,y: -viewObject.frame.minY,width: view.bounds.size.width,height: view.bounds.size.height)

UIGraphicsBeginImageContext(viewObject.frame.size)
        view.drawHierarchy(in: bounds, afterScreenUpdates: true)
        let outputImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()