像主屏幕iPhone中的应用程序一样拖动UIView

时间:2011-07-08 01:04:16

标签: iphone objective-c ipad uiview drag

我有一个视图控件,在里面我计划放置一些控件,如按钮文本框等...我可以沿x轴拖动我的视图,如:

1)

enter image description here

2)

enter image description here

使用以下代码:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];

    if( [touch view] == ViewMain)
    {
        CGPoint location = [touch locationInView:self.view];
        displaceX = location.x - ViewMain.center.x;        
        displaceY = ViewMain.center.y;        
        startPosX = location.x - displaceX;
    }

    CurrentTime = [[NSDate date] timeIntervalSince1970];

}


- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{



    UITouch *touch = [[event allTouches] anyObject];

    if( [touch view] == ViewMain)
    {
        CGPoint location = [touch locationInView:self.view];
        location.x =location.x - displaceX;
        location.y = displaceY;
        ViewMain.center = location;
    }  


}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    double time = [[NSDate date] timeIntervalSince1970]-CurrentTime;


    UITouch *touch = [[event allTouches] anyObject];

    if( [touch view] == ViewMain)
    {
        CGPoint location = [touch locationInView:self.view];
        location.x =location.x - displaceX;
        location.y = displaceY;
        ViewMain.center = location;
        double speed = (ViewMain.center.x-startPosX)/(time*2);
        NSLog(@"speed: %f", speed);

    }
}

不是我必须添加全局变量:

float displaceX = 0;
float displaceY = 0;
float startPosX = 0;
float startPosY = 0;
double CurrentTime;

我创建这些变量的原因是当我开始拖动视图时,视图从我触摸它的位置而不是从中间移动。

无论如何,如果我触摸按钮或图像,即使图像在背景上具有透明度,视图也不会拖动。我希望能够仍然能够拖动视图,无论视图顶部是否有图像。我在想,也许我需要在一切之上放置一个大透明视图,但我需要有按钮,图像等。我希望能够像你一样拖动视图:

enter image description here

请注意,无论我第一次触摸应用/图片或文字,我都可以拖动视图。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可能需要考虑针对此问题的不同方法。您可能最好使用UIScrollView并将pagingEnabled属性设置为YES,而不是尝试手动管理自己滚动的内容。这是Apple推荐的方法(它可能是您最后一次截图中Springboard.app使用的方法)。如果您是iOS开发人员计划的成员,请查看UIScrollView上的WWDC 2010会话,以获取此示例。我想他们可能也在developer.apple.com上发布了示例代码。

答案 1 :(得分:1)

我认为您的问题是如果您在启用了交互的情况下触摸UIButton或UIImageView,它就不会通过触摸。 对于图像,取消选中IB中的User Interaction Enabled属性。 对于导致touchesBegan:withEvent:等的按钮不被调用,请查看以下链接:Is there a way to pass touches through on the iPhone?