2016-08-29 5 views
0

Я делаю приложение, которое использует gestureRecognizer, чтобы перетащить каплю view с прикосновением. Однако новостные позиции не сохраняются, и я действительно не знаю, как их получить.
во-первых, я использую этот gestureRcognizer пошевелить view:Сохранить координаты или обновить фреймы

func glisserDeposerNote(sender : UIPanGestureRecognizer) { 
    let note1 = sender.view! 
    let touchCoordinates = sender.locationInView(self.scrollview) 
    note1.center = touchCoordinates 
    self.viewnote1.translatesAutoresizingMaskIntoConstraints = true 
} 

Во-вторых, я попытался преобразовать CGPoint в NSData, но я не знаю, как сохранить его после этого:

let points = touchCoordinates 
let pointObj = NSValue(CGPoint: points) 
let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject(pointObj, forKey: "coord1") 

Но это делает сбой, когда я пытаюсь переместить представление. Я заметил, что это потому, что defaults.setObject..., но я действительно не знаю почему.

+0

Try SetValue вместо SetObject. –

+0

не работает, снова сбой :( – Matt

ответ

1

По-видимому, CGPoint не поддерживается значением для пользовательских значений по умолчанию. Попробуйте преобразовать его в строку, а затем обратно. У вас есть инструменты для них. Пример:

let pointValue = NSStringFromCGPoint(CGPoint(x: 0.1, y: 1.0)) 
NSUserDefaults.standardUserDefaults().setValue(pointValue, forKey: "coord1") 
let point = CGPointFromString(NSUserDefaults.standardUserDefaults().valueForKey("coord1") as! String) 
+0

спасибо, этот код не разбивает мое приложение, но позиция не сохраняется. Однако я установил его в viewDidLoad: 'let pointaved = CGPointFromString (NSUserDefaults.standardUserDefaults(). valueForKey ("coord1") как! String) ' ' note1.center = pointsaved' – Matt

+0

В какой-то момент вы должны вызвать синхронизацию по умолчанию для пользователей. Вы можете сделать это после того, как вы установите их в вашем случае, но обычно пытаетесь чтобы сделать это, когда это имеет смысл из-за возможных проблем с производительностью. –

+0

Также старайтесь избегать вскрытия силы (! -s). –

0

Я наконец-то нашел, что: UIView won't move correctly on ViewDidLoad

Так что я должен использовать override func viewDidLayoutSubviews()

+0

Он должен правильно перемещаться, загрузился, но он должен быть без ограничений, обычно сгенерированный программным способом. Другой способ заключается в том, чтобы установить ведущее ограничение муравья для представления и манипулировать ограничениями вместо установки рамки/центра представления. Или еще один, чтобы установить преобразование вида как перевод, сгенерированный из точки. –

 Смежные вопросы

  • Нет связанных вопросов^_^