перетащите UIView как приложения на домашний экран iPhone

У меня есть элемент управления представлением, и внутри я планирую разместить некоторые элементы управления, такие как текстовое поле кнопок и т. Д. Я могу перетащить свое представление по оси x, например:

1)

введите описание изображения здесь

2)

введите описание изображения здесь

со следующим кодом:

-(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;

Причина, по которой я создал эти переменные, заключается в том, что, когда я начинаю перетаскивать представление, представление перемещается из точки, в которой я касаюсь его, а не из середины.

В любом случае, если я коснусь кнопки или изображения, представление не будет перетаскиваться, даже если изображения имеют прозрачность на фоне. Я хочу иметь возможность перетаскивать представление независимо от того, есть ли изображение поверх представления. Я подумал, что, возможно, мне нужно разместить большое прозрачное представление поверх всего, но мне нужны кнопки, изображения и т. Д. Я хочу иметь возможность перетаскивать представление, как вы, с помощью:

введите описание изображения здесь

обратите внимание, что я мог перетаскивать вид независимо от того, коснулся ли я сначала приложения / изображения или текста. Как я мог это сделать?


person Tono Nam    schedule 08.07.2011    source источник


Ответы (2)


Я думаю, ваша проблема в том, что если вы прикоснетесь к UIButton или UIImageView с включенным взаимодействием, он не передаст прикосновение. Для изображений снимите флажок User Interaction Enabledproperty в IB. Чтобы кнопки, вызывающие touchesBegan: withEvent: и т. Д., Не вызывались, просмотрите следующую ссылку: Есть ли способ передавать касания на iPhone?.

person Greg    schedule 08.07.2011

Вы можете рассмотреть другой подход к этой проблеме. Вместо того, чтобы пытаться вручную управлять прокруткой контента самостоятельно, вам, вероятно, будет лучше использовать UIScrollView со свойством pagingEnabled, установленным на YES. Это метод, который рекомендует Apple (и, вероятно, это метод, использованный Springboard.app на вашем последнем снимке экрана). Если вы являетесь участником программы для разработчиков iOS, посмотрите сеанс WWDC 2010 на UIScrollView, чтобы увидеть пример этого. Я думаю, что они, возможно, также разместили образец кода на developer.apple.com.

person ragfield    schedule 08.07.2011