Nano Hash - криптовалюты, майнинг, программирование

Смещение фрейма окна без перемещения его содержимого в Objective-C

У меня есть кнопки (+) и (-)... Кнопка (+) должна сделать окно длиннее в направлении вниз, а кнопка (-) должна отменить то, что сделала кнопка (+), сделав его короче от низ.

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

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

NSRect frame = sender.window.frame;
NSLog(@"\nHeight and width of window frame: (%f,%f).\nThe x and y origin of the window frame: (%f,%f). ", frame.size.height, frame.size.width, frame.origin.x, frame.origin.y);
frame.origin.y -= 22;
frame.size.height += 22;
[sender.window setFrame:frame display:YES animate:NO];

NSRect viewFrame = mainView.frame;
viewFrame.origin.y -= 22;
viewFrame.size.height += 22;
mainView.frame = viewFrame;

Но скажем, вы нажимаете кнопку (+) один раз; все элементы немного смещаются вверх, а рамка становится длиннее. Если вы нажмете (+) последовательно после первого нажатия, он будет работать так, как ожидалось: рамка сместится вниз, а ее содержимое останется на месте. Если вы затем нажали кнопку (-) один раз; все элементы немного смещаются вниз, а рамка укорачивается. Нажав (-) последовательно после первого нажатия, рамка просто переместится, как и ожидалось.

Кажется, что нажатие кнопки в первый раз переместит все содержимое окон, в то время как последовательные нажатия будут работать по назначению... Я хотел бы знать, не упустил ли я что-то об автоматическом изменении размера в редакторе интерфейса XCode. Спасибо.

03.10.2012

Ответы:


1

Предполагая, что mainView является основным видом в вашем окне, вам не следует изменять его рамку вручную. Пока у вас правильно настроены пружины и распорки (или ограничения), размер окна должен изменяться автоматически.

03.10.2012

2
    [mainWindow disableScreenUpdatesUntilFlush];
[mainWindow disableFlushWindow];

NSRect frame = sender.window.frame;
NSRect viewFrame = mainView.frame;

viewFrame.size.height += 25;
frame.size.height += 25;
frame.origin.y -= 25;

[sender.window setFrame:frame display:YES animate:NO];
mainView.frame = viewFrame;

[mainWindow enableFlushWindow];

Это прекрасно работает. Я не мог связать NSView и окно, поэтому я просто перемещаю их вручную и использую disableFlushWindow, чтобы это происходило одновременно.

05.10.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..