Как показать коллекцию изображений в графическом интерфейсе VisualWorks Smalltalk

Я хочу загрузить коллекцию изображений и показать их в графическом интерфейсе, например, в Instagram или что-то в этом роде. Как мне это сделать?
Какой виджет мне следует использовать?
Я пытался создать ViewHolder в графический интерфейс, но я не знаю, как мне назначить изображение для отображения.


person bassojf    schedule 22.08.2014    source источник


Ответы (1)


Использование держателя представления — хорошее начало. Держатель представления работает с объектом View. Этот объект должен быть подклассом View, и вы сохраняете экземпляр в своей модели приложения в переменной экземпляра. Аксессор этой переменной экземпляра должен использоваться в UIPainter, чтобы ViewHolder знал, как получить доступ к своему представлению.

Теперь в этом подклассе View вам нужно реализовать #displayOn:, который получает GraphicsContext в качестве параметра. Этот GraphicsContext имеет clippingRect, который вы должны использовать, чтобы определить, какое изображение рисовать. Чтобы нарисовать изображения, вы обычно отправляете #displayOn: на изображение, но, вероятно, также доступен метод #displayOn:at:.

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

В общем, было бы неплохо взглянуть на GUIDevGuide.pdf в папке doc вашей установки VisualWorks. Он шаг за шагом описывает ViewHolder и его использование.

person Karsten    schedule 22.08.2014
comment
На моем холсте я определил поле представления Customview с помощью этого метода: #myView ^PhotoView new PhotoView — это мой подкласс представления. Я переопределил в PhotoView этот метод как #displayOn: aGraphicsContext aGraphicsContext displayLineFrom: 10@10 to: 150@10. И он показывает строку в пользовательском представлении как чаму, но я хочу показать изображение из файла, и я не знаю, что является хорошей практикой для его обработки, у меня будет много изображений, и customView должен переключаться между ними. любая помощь? Спасибо!! - person bassojf; 25.08.2014
comment
Во-первых, изображения можно рисовать с помощью #displayOn:at:. Итак, как только вы получили свои изображения, вы можете рисовать их. Чтобы получить изображения, это немного сложно. Вам нужно загрузить посылку ImageReaders. Затем вы можете использовать изображение (ImageReader fromFile: aFilename). Это вернет экземпляр Image. Недостатком здесь является то, что VisualWorks сама выполняет все декодирование, и если у вас есть JPG, декодирование довольно интенсивно. PNG быстрее, но чем больше изображение, тем медленнее изображение, так как все данные изображения хранятся в объектах. Если вам нужна скорость, вам нужно использовать DLLCC для доступа к C-API. - person Karsten; 27.08.2014