Перетащите 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;

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

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

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

2 ответа

Решение

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

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

Другие вопросы по тегам