#object #button #frame
#объект #кнопка #рамка
Вопрос:
У меня есть кнопка, которую можно перетаскивать по экрану. Мне было интересно, есть ли способ сохранить кнопку внутри фрейма представления.
Я использовал этот код, чтобы сделать кнопку способной к перетаскиванию:
UIPanGestureRecognizer *buttonPanRecognizer;
buttonPanRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(setObjectLocation:)];
[NewButton addGestureRecognizer:buttonPanRecognizer];
- (void)setObjectLocation:(UIPanGestureRecognizer *)recognizer {
CGPoint location = [recognizer locationInView:self.view];
if (CGRectContainsPoint([NewButton frame], location)) { // NewButton
NewButton.center = location;
}
else if (CGRectContainsPoint([NewLabel frame], location)) { // NewLabel
NewLabel.center = location;
} }
Я также хочу иметь возможность сохранять другие виды объектов внутри.
Спасибо заранее 🙂
Проблема в том, что можно перетаскивать части UIButton за пределы экрана.
Комментарии:
1. Я подозреваю, что этот вопрос на самом деле не связан с Xcode, не так ли? Вы хотите выполнить то, что вы делаете внутри своего приложения, а не внутри Xcode (как в Interface Builder), верно?
2. эххх, немного смущен вашим вопросом. Но что мне нужно, так это код для записи в Xcode, чтобы, когда мое приложение запущено на устройстве, и кто-то перетаскивает кнопку вокруг него, нельзя было перемещать за пределы фрейма представления …. конечно, это невозможно сделать, чтобы перетащить весь объект из фрейма, но его части нельзя
3. как сейчас … и я желаю, чтобы ни одна из частей объекта не могла выходить за пределы фрейма представления
4. Я знаю, что вы хотите сделать, я просто говорю вам, что это не вопрос, связанный с Xcode (кроме того факта, что вы пишете свой код в Xcode, но вы могли бы использовать любой текстовый редактор для этого). Это все равно, что сказать: «Microsoft Word: как пишется Blabla». Но дружелюбный модератор уже удалил тег Xcode, вам также следует рассмотреть возможность удаления его из вашего заголовка.
5. Хорошо, спасибо… но это все еще не совсем решает мою проблему …. вы знаете, как я мог бы сделать это внутри Interface Builder? 🙂
Ответ №1:
Я должен согласиться, что ваша проблема не совсем ясна. Для чего предназначен весь материал с меткой. Как правило, чтобы сохранить кнопку внутри фрейма, у вас уже есть все необходимое:
UIPanGestureRecognizer* buttonPanRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(setObjectLocation:)];
[NewButton addGestureRecognizer:buttonPanRecognizer];
- (void)setObjectLocation:(UIPanGestureRecognizer *)recognizer {
CGPoint location = [recognizer translationInView:self.view];
if (CGRectContainsPoint(self.view.frame, location)) {
NewButton.center = location;
}
}
Комментарии:
1. Я вставил фотографию, чтобы вы могли видеть проблему.
2. Это не очень полезно. Что делает мое решение? Вы знаете, вы не можете ожидать, что мы дадим вам код, который вам просто нужно скопировать и вставить. Вам нужно будет протестировать и, возможно, изменить его в соответствии с вашим кодом, если он не работает.
3. Я знаю… Я попробую немного поиграть с этим 🙂 спасибо 🙂
4. Нет проблем. Кроме того, и я действительно не имею в виду это как оскорбление, вам нужно разобраться с основами. Судя по этому и другому вашему вопросу, у вас есть некоторые пробелы в знаниях о базовом obj-c. Есть много руководств «Просто введите то, что я говорю», и следование им — отличный способ погрузиться в суть дела 🙂
5. хорошо, спасибо 🙂 через несколько минут я обновлю свой другой вопрос о том, как я кое-что сделал… Я был бы признателен, если бы вы посмотрели на это 🙂
Ответ №2:
В чем проблема? Просто сохраните начало кнопки в прямоугольнике (frame.x, frame.y, frame.width — кнопка.ширина, рамка.высота — кнопка.высота).