我試圖實現一個用戶使用的照片剪裁工具,我堅持。我有一個UIView
(imageCropper
),其在頂部的UIImageView
(imageToBeEdited
)的(z順序逐),其包含正被裁剪的圖像。如果我現在運行應用程序,使用我的其他配置和邏輯,imageCropper
就在圖像的頂部。但是,當我設置的imageToBeEdited
的maskView
到imageCropper
的imageCropper
轉移的原點。在弄清了約束常量之後,我確定它正在由前導約束的確切值轉變爲更大的x,並且通過頂端約束的確切值確定更大的y。的UIView作爲maskView-起源的約束轉移常數
另一塊信息,使這個更加混亂,是我有另一個UIView
(imageCropperBorder
)之上(再次z次序明智)的imageCropper
,僅僅充當一個可見的邊框。我將它的框架設置爲與imageCropper
完全相同的框架,但它們都是應該在的位置。
我沒有制約imageCropper
或imageCropperBorder
設置。
我的問題是爲什麼imageCropper
正在移位,我該如何解決這個問題?
嘗試幾種不同的方法來創建啓用用戶,平滑移動裁剪工具後,我來到了由viewDidLoad
編程抓住制約的值,然後調整的起源回到這個解決方案,簡單地創建x和y偏移imageCropper
在viewDidLayoutSubviews
和那工作。
不過,我有建立在ViewController
的視圖panGestureRecognizer
。一旦我開始拖動照片(imageCropper
)進行裁剪,imageCropper
原點再次下移。我嘗試將偏移邏輯添加到處理識別器的函數中,但它似乎將複合變化並將幀從屏幕上發送出去。 (我重置每個收到識別器的翻譯。)
代碼:
override func viewDidLayoutSubviews() {
resizedImageFrame = AVMakeRectWithAspectRatioInsideRect(imageToEdit.image!.size, imageToEdit.bounds)
let resizedImageCenter = imageToEdit.center
let resizedImageX = resizedImageCenter.x - (resizedImageFrame.width/2)
let resizedImageY = resizedImageCenter.y - (resizedImageFrame.height/2)
resizedImageFrame.origin = CGPoint(x: resizedImageX, y: resizedImageY)
currentImageFrame = resizedImageFrame
imageCropperBorder.frame = resizedImageFrame
imageCropper.frame = CGRectOffset(resizedImageFrame, -cropperXOffset, -cropperYOffset)
// imageCropper.frame above is set with the offset discussed. If I set it
// to simply resizedImageFrame it does NOT appear where imageCropperBorder is
}
與往常一樣,任何幫助,將不勝感激。
我會添加設置一個視圖作爲一個maskView使其成爲該視圖的子視圖。 (我終於檢查了這個調用.superview。)另外,因爲我正在處理一個調整大小的圖像,我不得不做一些計算,並且不能像原樣那樣使用超級視圖的邊界。謝謝您的幫助。 – Amelia