UIButton'u dokunuşla taşıma

Kullanıyorum :

[button addTarget:self action:@selector(moved:) forControlEvents:UIControlEventTouchDragInside];

İşlev kodu taşınması:

- (IBAction)moved:(id)sender {
UIButton *t = sender;

UITouch *touch = [touch self];

CGPoint touchPoint = [touch locationInView: self];

t.center = touchPoint;
}

Bu yüzden, düğmeyi sürüklemeye başladığımda, aniden sol üst köşede görünür (Koord: 0; 0). Bunun bir sorun olduğunu düşündüm çünkü CGPoint touchPoint = [touch locationInView: self]; yanlış şekilde çalışıyor. Uyguladığım 3 sınıfım var: viewController:

view = [[MainView alloc] initWithFrame:[self.view frame] ];
[self.view addSubview:view];

Görünümün sınıf mainview (subclass uiview) nesnesi olduğu yer. Anakartta, sınıf Button (subclass uiview) nesnesini yapıyorum:

[self addSubview:but];

Daha sonra Button sınıfında UIControlEventTouchDragInside ile ilişkilendirerek UIButton'u yapıyorum (gönderinin başlangıcına bakınız).

Kodumu nasıl düzeltmeliyim, bu düğme doğru noktaya değiyor mu?

Not; Benim korkunç İngilizce için üzgünüm =)

1

1 cevap

UIControlEventTouchDragInside ile gerçekten uğraşmak istiyorsanız, aşağıdaki snippet'i kullanın. Şahsen, onun yerine UIPanGestureRecognizer kullanırdım .

- (IBAction)moved:(UIButton *)sender {
    UITouch *touch = [touch self];
    CGPoint touchPoint = [touch locationInView: sender.superview];
    sender.center = touchPoint;
}
2
katma
Problemini nasıl çözdün?
katma yazar Philipp Schmid, kaynak
Bartosz Ciechanowski - iyi fikir için teşekkürler! Ama aynı problem gibi görünüyor; örneğin benim dokunma noktasım (x; y), ama (x-100; y-100) olarak kabul edildi! Önceki projemde her şey yolundaydı, ama şimdi ne olduğuna dair bir fikrim yok.
katma yazar Yaz, kaynak
Teşekkürler! Problemi başka bir şekilde çözdüm ...
katma yazar Yaz, kaynak
Sonra UIPanGestureRecognizer'a gideceğim.
katma yazar Bartosz Ciechanowski, kaynak