2016-07-04 10 views
2

這是我第一次問的問題,如果有什麼錯誤,請告訴我,輕聲:]不能在自定義的UIView更新UImageView的形象

這裏是我的自定義的UIView,有一個在它的UIImageView。我設置了它的圖像並突出了圖像。我希望當我平移它時可以改變它們。但它無法更新圖像。

謝謝你的閱讀,希望你能幫助我和其他像我一樣面臨同樣問題的人。

import Foundation 
import UIKit 

class TextStickerView: UIView { 
    var defaultInset: CGFloat = 20 
    var defaultMinimumSize: CGFloat { 
     return defaultInset * 4 
    } 
    let buttonSize = CGSize(width: 45, height: 45) 
    // Variables for moving view 
    var beginPoint: CGPoint! 
    var beginCenter: CGPoint! 

    var moveBtn: UIImageView { 
     let myView = UIImageView(frame: CGRect(origin: CGPoint(x: bottomLeftImageView.frame.origin.x + defaultInset/3, y: CGRectGetMaxY(bottomLeftImageView.frame)), size: buttonSize)) 
     myView.image = UIImage(named: "text_move") 
     myView.highlightedImage = UIImage(named: "text_move_down") 
     myView.contentMode = .ScaleToFill 
     let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:))) 
     myView.addGestureRecognizer(panGesture) 
     myView.userInteractionEnabled = true 
     return myView 
    } 
    func handlePanGesture(recognizer: UIGestureRecognizer) { 
     print("pan") 
     let touchLocation = recognizer.locationInView(self.superview) 
     switch recognizer.state { 
      case .Began: 
       moveBtn.highlighted = true 
       beginPoint = touchLocation 
       beginCenter = self.center 
       /// FIX: can not update moveBtn's image after set moveBtn.highlighted true 
       setNeedsDisplay() 
      case .Changed: 
       self.center = CGPoint(x: beginCenter.x + (touchLocation.x - beginPoint.x), y: beginCenter.y + (touchLocation.y - beginPoint.y)) 
      case .Ended: 
       self.center = CGPoint(x: beginCenter.x + (touchLocation.x - beginPoint.x), y: beginCenter.y + (touchLocation.y - beginPoint.y)) 
       moveBtn.highlighted = false 
       setNeedsDisplay() 


      default: 
       break 
     } 
     init(contentView: UIView) { 
     self.contentView = contentView 
     self.contentView.frame.origin = CGPoint(x: defaultInset, y: defaultInset) 
     let frame = CGRect(x: 0, y: 0, width: contentView.frame.width + defaultInset * 2, height: contentView.frame.height + defaultInset * 2 + buttonSize.height) 

     super.init(frame: frame) 

     self.addSubview(self.moveBtn) 
     self.moveBtn.userInteractionEnabled = true 
    } 
} 

回答

1

var moveBtn: UIImageView {是計算屬性。所以每次你得到它,你會得到一個新的圖像視圖。試試這個:

var moveBtn: UIImageView = { 
     let myView = UIImageView(frame: CGRect(origin: CGPoint(x: bottomLeftImageView.frame.origin.x + defaultInset/3, y: CGRectGetMaxY(bottomLeftImageView.frame)), size: buttonSize)) 
     myView.image = UIImage(named: "text_move") 
     myView.highlightedImage = UIImage(named: "text_move_down") 
     myView.contentMode = .ScaleToFill 
     let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:))) 
     myView.addGestureRecognizer(panGesture) 
     myView.userInteractionEnabled = true 
     return myView 
    }() 
+0

非常感謝你,Lumislxk。 – Jerome