Bạn có thể tham khảo các bài trước đó chắc chắn sẽ giúp bạn đạt được chức năng này ...
- Basic Drag and Drop in iOS
- Building drag and drop interface on iphone
- iPhone drag/drop
Đối với tất cả các liên kết trên, Bạn phải ghi nhớ rằng Trước tiên bạn cần nhận được sự kiện TouchesBegin
cho bất kỳ Kiểm soát nào và sau đó bạn phải nhận được TouchesMoved
sự kiện để kiểm soát tương tự.
Trong TouchesMoved
sự kiện, bạn chỉ cần có để có được điểm trung tâm (CGPoint) của Control. Và khi bạn thả điều khiển sẽ được đặt tại số CGPoint
đó. Nếu điều này tạo ra sự cố thì bạn có thể thực hiện biến số CGPoint
đó và đặt điểm đó trong sự kiện TouchesEnded
.
Đối với trường hợp của bạn, tôi nghĩ rằng bạn phải có để duy trì Hierarchy của Views ... Else trong khi kéo bạn xem có thể không nhìn thấy được ...
để mã hóa PHẦN THÊM:
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"%f,%f", self.center.x, self.center.y);
CGPoint newLoc = CGPointZero;
newLoc = [self.mainView convertPoint:[[touches anyObject] locationInView:self.superview] toView:self.superview];
float newX = newLoc.x + self.superview.frame.origin.x + (self.frame.size.width /2) + [[touches anyObject] locationInView:self].x ;
float newY = newLoc.y - (((UIScrollView *)self.superview).contentOffset.y *2) ;
NSLog(@"content offset %f", ((UIScrollView *)self.superview).contentOffset.y);
self.scrollParent.scrollEnabled = NO;
NSLog(@"%f,%f", self.center.x, self.center.y);
newLoc = CGPointMake(newX, newY);
[self.superview touchesCancelled:touches withEvent:event];
[self removeFromSuperview];
NSLog(@"%f,%f", self.center.x, self.center.y);
self.center = CGPointMake(newLoc.x, newLoc.y);
[self.mainView addSubview:self];
NSLog(@"%f,%f", self.center.x, self.center.y);
[self.mainView bringSubviewToFront:self];
isInScrollview = NO;
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[UIView beginAnimations:@"stalk" context:nil];
[UIView setAnimationDuration:.001];
[UIView setAnimationBeginsFromCurrentState:YES];
UITouch *touch = [touches anyObject];
self.center = [touch locationInView: self.superview];
[UIView commitAnimations];
if ((self.center.x + (self.frame.size.width/2)) > 150 && hasExitedDrawer && !self.scrollParent.dragging) {
self.scrollParent.scrollEnabled = NO;
[self.delegate moveItemsDownFromIndex: ((self.center.y + (self.scrollParent.contentOffset.y))/44) + 1 ];
//NSLog(@"%i", ((self.center.y + (self.scrollParent.contentOffset.y *2))/44) + 1);
}
if (self.center.x + (self.frame.size.width/2) < 150) {
hasExitedDrawer = YES;
}
}
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
if ((self.center.x + (self.frame.size.width/2)) > 150 && hasExitedDrawer && !self.scrollParent.dragging) {
CGPoint newLoc = CGPointZero;
newLoc = [self.scrollParent convertPoint:[[touches anyObject] locationInView:self.superview] toView:self.superview];
float newY = newLoc.y + (self.scrollParent.contentOffset.y *2);
[self.scrollParent insertSubview:self atIndex:((self.center.y + (self.scrollParent.contentOffset.y))/44) ];
self.frame = CGRectMake(0, newY, self.frame.size.width, self.frame.size.height);
isInScrollview = YES;
hasExitedDrawer = NO;
}
}
mã này có thể cantains một số không liên quan nhưng mang đến cho bạn ý tưởng thêm ...
[http://stackoverflow.com/questions/17678735/adding-drag-and-drop-component-to-ios-app/31963306#31963306](http://stackoverflow.com/questions/17678735/adding-drag-and-drop- thành phần-to-ios-app/31963306 # 31963306) Bạn có thể thử liên kết này tận hưởng mã hóa :) – SARATH