2010-07-12 79 views
0

我有一個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; 
} 
} 

回答

0

那麼一直無法操縱實際的UITextView。

首先嚐試製作一個可以移動並可以按下開始編輯的按鈕覆蓋圖,但它沒有正確居中。

然後嘗試上述方法來移動UITextView本身。但它只能用於觸摸或拖動。 (注意這是touchesBegan的一種修改形式& touchesMoved)

以UITextView作爲子視圖結束了UIScrollView。現在它可以平滑移動,只需將它從屏幕上的任何位置移動即可。不是最佳的,但是保持一切完好的最佳結果。

0

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]; 
} 
0
- (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後,此方法。