2017-03-26 29 views
1

iOS Swiftのビューのエッジまたは境界のタッチを検出する方法。ユーザーがUIViewの境界線をドラッグしたときにUIViewの幅と高さを増やしたい。UIVIEWのエッジでタッチを検出する

+0

を検出するためのコード - http://stackoverflow.com/questions/8460119/how-to-あなたが質問をする前に、いくつかの検索をすることをお勧めします:) – Fahim

+0

[両端からドラッグしてUIViewのサイズを変更する方法は?](http://stackoverflow.com) /質問/ 8460119/how-to-resize-uiview-by-the-edges) – Fahim

+0

@ Fahim、OPがタッチの検出方法を尋ねているので、実際には重複していないと推測していますUIViewのエッジ*、この質問は、 "ハンドル"を持つUIViewを解決します。つまり、(1)この質問を見て、(2)ピンチジェスチャーを使って、他のすべてのCocoaTouchアプリがそれをどのように実行するのかを検討してください。タッチを検出することはあまりユーザーフレンドリーではありません...アップルはボタンのサイズを最小限40x40にすることを提案しています。あなたは本当にマウスポインタがもたらすのと同じ正確さを期待できますか?ハンドルまたはピンチジェスチャーを使用する必要があります。 – dfd

答えて

0

溶液を得た。How to resize UIView by dragging from its edges?溶液。

スウィフトのバージョンとあなたは以下のSOスレッドを見てみたいことがありますエッジだけでなく、コーナー

class OverlayView: UIView { 

    /* 
    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     // Drawing code 
    } 
    */ 


    static var kResizeThumbSize:CGFloat = 44.0 
    private typealias `Self` = OverlayView 

    var imageView = UIImageView() 

    var isResizingLeftEdge:Bool = false 
    var isResizingRightEdge:Bool = false 
    var isResizingTopEdge:Bool = false 
    var isResizingBottomEdge:Bool = false 

    var isResizingBottomRightCorner:Bool = false 
    var isResizingLeftCorner:Bool = false 
    var isResizingRightCorner:Bool = false 
    var isResizingBottomLeftCorner:Bool = false 


     //Define your initialisers here 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     if let touch = touches.first { 
      let currentPoint = touch.location(in: self) 

      isResizingBottomRightCorner = (self.bounds.size.width - currentPoint.x < Self.kResizeThumbSize && self.bounds.size.height - currentPoint.y < Self.kResizeThumbSize); 
      isResizingLeftCorner = (currentPoint.x < Self.kResizeThumbSize && currentPoint.y < Self.kResizeThumbSize); 
      isResizingRightCorner = (self.bounds.size.width-currentPoint.x < Self.kResizeThumbSize && currentPoint.y < Self.kResizeThumbSize); 
      isResizingBottomLeftCorner = (currentPoint.x < Self.kResizeThumbSize && self.bounds.size.height - currentPoint.y < Self.kResizeThumbSize); 

      isResizingLeftEdge = (currentPoint.x < Self.kResizeThumbSize) 
      isResizingTopEdge = (currentPoint.y < Self.kResizeThumbSize) 
      isResizingRightEdge = (self.bounds.size.width - currentPoint.x < Self.kResizeThumbSize) 

      isResizingBottomEdge = (self.bounds.size.height - currentPoint.y < Self.kResizeThumbSize) 

      // do something with your currentPoint 

     } 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
     if let touch = touches.first { 
      let currentPoint = touch.location(in: self) 
      // do something with your currentPoint 
     } 
    } 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     if let touch = touches.first { 
      let currentPoint = touch.location(in: self) 
      // do something with your currentPoint 


      isResizingLeftEdge = false 
      isResizingRightEdge = false 
      isResizingTopEdge = false 
      isResizingBottomEdge = false 

      isResizingBottomRightCorner = false 
      isResizingLeftCorner = false 
      isResizingRightCorner = false 
      isResizingBottomLeftCorner = false 

     } 
    } 
関連する問題