2015-06-30 6 views
0

Я новичок в Swift. Я хочу создать приложение с движущимся подзоном. Я тестирую приложение, и когда я касаюсь кнопки, subview движется с правильным значением, но когда родительский UIView обновляется из-за изменения метки, subview возвращается к исходной координате, которую я установил в раскадровке. Я использую основную графику для рисования круга. Я хочу переместить круг на экране, нажав кнопку. Как я могу решить эту проблему?Обновление UIView делает хэш выравнивания subview/Swift

class ViewController: UIViewController { 

      @IBOutlet weak var movingItem: MovingItem! /* inheritance from UIView */ 

      @IBAction func move() { 

       self.movingItem.frame = CGRect(x: movingItem.frame.origin.x + 5.0, 
              y: movingItem.frame.origin.y, 
              width: movingItem.frame.width, 
              height: movingItem.frame.height) 
     } 

     override func viewDidLoad() { 

       self.movingItem.frame = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0) 
       self.movingItem.setNeedsDisplay() 
     } 

//more code... 

    } 



@IBDesignable 
class MovingItem: UIView { 

    override func drawRect(rect: CGRect) { 

     var context = UIGraphicsGetCurrentContext() 
     CGContextBeginPath(context) 

     var rectForCircle = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0) 
     CGContextAddEllipseInRect(context, rectForCircle) 

     UIColor.redColor().setFill() 
     CGContextDrawPath(context, kCGPathFill) 

    } 

} 

ответ

0

Попробуйте вместо

var rectForCircle = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0) 
CGContextAddEllipseInRect(context, rectForCircle) 

как это:

CGContextAddEllipseInRect(context, self.frame) 

и вставить линии

self.movingItem.setNeedsDisplay() 

после

self.movingItem.frame = CGRect(x: movingItem.frame.origin.x + 5.0, 
              y: movingItem.frame.origin.y, 
              width: movingItem.frame.width, 
              height: movingItem.frame.height) 
+0

проблема такая же. Когда основной UIView обновляется, subview, в котором круг возвращается назад. Между двумя обновлениями подчиненное устройство перемещается правильно, но когда обновляется uiview, subview, что содержится в uiview, возвращается к координации координат. По пути, спасибо! –