Я работаю над созданием контроллера вида, который обрезает изображение до определенного размера с помощью перетаскиваемых контрольных точек, а фоновое изображение за пределами зоны обрезки будет затемнено.Изображение Обрезка захвата неправильной части UIImage во время обрезки
По какой-либо причине, когда изображение обрезается, оно захватывает неправильную ссылку. Я рассматривал почти все другие сообщения об этом, чтобы иметь дело с обрезкой.
Вот моя установка для раскадровки:
Я задал несколько других людей, в том числе воспитателя и наставника из курса, который я принимаю, но все мы, кажется, тупик.
я могу выбрать кадр, перетаскивая углы UL UR DL DR вокруг контроллера представления, как это:
Но когда я нажимаю на кнопку и использовать функцию кадрирования, которую я написал, я получить то, что не является правильным урожаем, основанным на выборке в рамке.
Я также получаю сообщение об ошибке во время вегетационного proceedure:
2016-09-07 23:36:38.962 ImageCropView[33133:1056024]
<UIView: 0x7f9cfa42c730; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x7f9cfa408400>>'s window
is not equal to <ImageCropView.CroppedImageViewController: 0x7f9cfa43f9b0>'s view's window!
Нарушитель часть кода должна быть где-то в одном из перечисленных ниже функций.
Вот функция кадрирования:
func cropImage(image: UIImage, toRect rect: CGRect) -> UIImage {
func rad(deg: CGFloat) -> CGFloat {
return deg/180.0 * CGFloat(M_PI)
}
// determine the orientation of the image and apply a transformation to the crop rectangle to shift it to the correct position
var rectTransform: CGAffineTransform
switch image.imageOrientation {
case .Left:
rectTransform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(rad(90)), 0, -image.size.height)
case .Right:
rectTransform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(rad(-90)), -image.size.width, 0)
case .Down:
rectTransform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(rad(-180)), -image.size.width, -image.size.height)
default:
rectTransform = CGAffineTransformIdentity
}
// adjust the transformation scale based on the image scale
rectTransform = CGAffineTransformScale(rectTransform, UIScreen.mainScreen().scale, UIScreen.mainScreen().scale)
// apply the transformation to the rect to create a new, shifted rect
let transformedCropSquare = CGRectApplyAffineTransform(rect, rectTransform)
// use the rect to crop the image
let imageRef = CGImageCreateWithImageInRect(image.CGImage, transformedCropSquare)
// create a new UIImage and set the scale and orientation appropriately
let result = UIImage(CGImage: imageRef!, scale: image.scale, orientation: image.imageOrientation)
return result
}
Вот функции, чтобы установить и перевести вид маски
func setTopMask(){
let path = CGPathCreateWithRect(cropViewMask.frame, nil)
topMaskLayer.path = path
topImageView.layer.mask = topMaskLayer
}
func translateMask(sender: UIPanGestureRecognizer) {
let translation = sender.translationInView(self.view)
sender.view!.center = CGPointMake(sender.view!.center.x + translation.x, sender.view!.center.y + translation.y)
// print(sender.translationInView(self.view))
sender.setTranslation(CGPointZero, inView: self.view)
// print("panned mask")
if sender.state == .Ended {
printFrames()
}
}
func setCropMaskFrame() {
let x = ulCorner.center.x
let y = ulCorner.center.y
let width = urCorner.center.x - ulCorner.center.x
let height = blCorner.center.y - ulCorner.center.y
cropViewMask.frame = CGRectMake(x, y, width, height)
setTopMask()
}
Вам действительно нужно показать _all_ этот код, чтобы задать этот вопрос? Я не могу понять, где искать. И что означает «это захват неправильной ссылки» даже _mean_? Я не могу понять, в чем вопрос. – matt
Привет, Мэтт, извините, если это немного подробный. Я просто хотел убедиться, что контекст был ясен. Я использую несколько представлений, чтобы манипулировать другими, а затем в конечном итоге пытаюсь захватить часть изображения, основанную на границах маскирующего представления, которое было изменено этими представлениями. –
Я предлагаю вам сделать MCVE (минимальный полный проверяемый пример). Покажите мне, как иметь проблему, с которой вы сталкиваетесь, ни с чем другим. – matt