2016-02-05 2 views
2

Я новичок в Swift, и я пытаюсь дать пользователю нарисовать прямоугольник (касание и перетаскивание), чтобы выбрать область изображения, как при обрезке, но я не знаю, t хочу обрезать Я просто хочу знать CGRect, созданный пользователем.Позвольте пользователю рисовать прямоугольник, чтобы выбрать область

До сих пор у меня есть .xib с UIImage внутри и его ViewController. Я хочу рисовать над изображением, но каждый учебник, который я нашел о рисовании, касается подкласса UIView, переопределяет drawRect и ставит его как класс xib.

+0

Что случилось с подклассификацией UIView и переопределить drawRect? –

ответ

3

Я понял. Я только что создал uiview и изменил его раму в зависимости от событий касаний

let overlay = UIView() 
var lastPoint = CGPointZero 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    overlay.layer.borderColor = UIColor.blackColor().CGColor 
    overlay.backgroundColor = UIColor.clearColor().colorWithAlphaComponent(0.5) 
    overlay.hidden = true 
    self.view.addSubview(overlay) 

} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    //Save original tap Point 
    if let touch = touches.first { 
     lastPoint = touch.locationInView(self.view) 
    } 
} 

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    //Get the current known point and redraw 
    if let touch = touches.first { 
     let currentPoint = touch.locationInView(view) 
     reDrawSelectionArea(lastPoint, toPoint: currentPoint) 
    } 
} 

func reDrawSelectionArea(fromPoint: CGPoint, toPoint: CGPoint) { 
    overlay.hidden = false 

     //Calculate rect from the original point and last known point 
     let rect = CGRectMake(min(fromPoint.x, toPoint.x), 
     min(fromPoint.y, toPoint.y), 
     fabs(fromPoint.x - toPoint.x), 
     fabs(fromPoint.y - toPoint.y)); 

    overlay.frame = rect 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    overlay.hidden = true 

    //User has lift his finger, use the rect 
    applyFilterToSelectedArea(overlay.frame) 

    overlay.frame = CGRectZero //reset overlay for next tap 
} 
Смежные вопросы