如何在视图屏幕上拖动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后,此方法。