перетащите UIView как приложения на домашний экран iPhone - PullRequest
0 голосов
/ 08 июля 2011

У меня есть элемент управления видом, и внутри я планирую разместить некоторые элементы управления, такие как текстовое поле кнопок и т. Д. Я могу перетащить свой вид вдоль оси 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 ]

1 голос
/ 08 июля 2011

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

1 голос
/ 08 июля 2011

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

...