如何在视图屏幕上拖动UITextView?

问题描述:

我有一个UITextView(用于多行)可以在屏幕上拖动的项目。到目前为止,我的解决方案已经覆盖了一个无形的UIButton,当它拖动它的中心时与UITextView的中心相同。如何在视图屏幕上拖动UITextView?

但是我见过的应用程序似乎只是允许UITextView在飞行中进行拖动和编辑,因此看起来可能没有覆盖这些但我不确定。

想法?

顺便说一句,C在这段代码是UIButton的,这是我迄今为止已经移动了它:

- (void) draggedOut: (UIControl *) c withEvent: (UIEvent *) ev 
{ 

if(self.interfaceOrientation == UIInterfaceOrientationPortrait) 
{ 
    c.center = [[[ev allTouches] anyObject] locationInView:self.view]; 
    AddedText.center = c.center; 
} 
else if(self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
{ 
    c.center = [[[ev allTouches] anyObject] locationInView:self.view]; 
    AddedText.center = c.center; 
} 
else if(self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
{ 
    c.center = [[[ev allTouches] anyObject] locationInView:self.view]; 
    AddedText.center = c.center; 
} 
else if(self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
{ 
    c.center = [[[ev allTouches] anyObject] locationInView:self.view]; 
    AddedText.center = c.center; 
} 
} 

那么一直无法操纵实际的UITextView。

首先尝试制作一个可以移动并可以按下开始编辑的按钮覆盖图,但它没有正确居中。

然后尝试上述方法来移动UITextView本身。但它只能用于触摸或拖动。 (注意这是touchesBegan的一种修改形式& touchesMoved)

以UITextView作为子视图结束了UIScrollView。现在它可以平滑移动,只需将它从屏幕上的任何位置移动即可。不是最佳的,但是保持一切完好的最佳结果。

textView是否需要支持滚动?如果是这样,这可能会变得复杂。

但是,如果没有,有两种方法。 1)继承textview并覆盖touchesBegan,touchesMoved,touchesEnded。 2)编写一个手势识别器,处理相同的消息并将其附加到文本视图。

这里是一个手势识别,将做的工作的一个例子:

@interface TouchMoveGestureRecognizer : UIGestureRecognizer 
{ 
    CGPoint _ptOffset; 
} 

@end 

@implementation TouchMoveGestureRecognizer 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch* t = [touches anyObject]; 
    _ptOffset = [t locationInView: self.view]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch* t = [touches anyObject]; 
    CGPoint pt = [t locationInView: self.view.superview]; 
    pt.x -= _ptOffset.x; 
    pt.y -= _ptOffset.y; 

    CGRect r = self.view.frame; 
    r.origin = pt; 
    self.view.frame = r; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    _ptOffset = CGPointMake(-1, -1); 
} 

@end 

,并如何使用它:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _textView.scrollEnabled = NO; 

    TouchMoveGestureRecognizer* gr = [[[TouchMoveGestureRecognizer alloc] init] autorelease]; 
    [_textView addGestureRecognizer: gr]; 
} 

- (void)panTextView:(UIPanGestureRecognizer *)recognizer { 
     NSLog(@"panning"); 

location1 = [recognizer translationInView:draggableTextView]; 


    recognizer.view.center = CGPointMake(recognizer.view.center.x + location1.x, 
            recognizer.view.center.y + location1.y); 



     [recognizer setTranslation:CGPointMake(0,0) inView:draggableTextView]; 

    location1 =[recognizer locationInView:draggableTextView]; 
     NSLog(@"tranlation %@",NSStringFromCGPoint(location1)); 

    [_imgpic addSubview:recognizer.view]; 

appDelegate.txt=draggableTextView.text; 
} 

呼叫建立的TextView后,此方法。