Я искал вокруг и не нашел ничего относительно этой конкретной проблемы.У меня есть окно с вертикальным NSSplitView.В правом представлении splitview у меня есть объект NSBox, установленный для заполнения содержимого представления.Я загружаю в пользовательские кончики, используя setContentView: чтобы поменять местами представления в NSBox с правой стороны splitview.В моих пользовательских представлениях я пытаюсь заполнить представления объектом NSColor, который использует NSImage для создания фона.Все это работает как положено.Я использую код, основанный на этой статье: http://www.mere -mortal-software.com / blog / details.php? D = 2007-01-08 для установки фазы шаблона на верхнийлевый угол:
[[NSGraphicsContext currentContext] saveGraphicsState];
[[NSGraphicsContext currentContext] setPatternPhase: NSMakePoint( [self bounds].origin.x,
[self bounds].size.height )];
[[self leatherColor] set];
NSRectFill( [self bounds] );
[[NSGraphicsContext currentContext] restoreGraphicsState];
с намерением, чтобы шаблон оставался постоянным в верхнем левом углу NSBox, когда размеры представления изменяются в соответствии с ожидаемым поведением (через перемещение splitview илисамо окно изменяемого размера).Я реализовал это в урезанном тестовом приложении только с окном и пользовательским представлением, и оно ведет себя, как и ожидалось.
Однако в моем проекте с splitview оно ведет себя так, как будто patternPhase устанавливается наверхний левый угол всего окна вместо верхнего левого угла правой половины разделенного вида (т.е. он должен смещаться с изменением размера разделенного вида). Он ведет себя так, как будто «показывает большее изображение, а не смещается вместе с ним.уверен, что это проблема с несколькими координатными пространствами, я неправильно понимаю, как работают координаты NSSplitView, или что-то связанное с иерархией представления. Из документации по NSGraphicsContext, в методе setPatternPhase: он говорит: «Например, установка шаблонаФаза в (2,3) приводит к перемещению начала мозаичного элемента ячейки в точку (2,3) в пользовательском пространстве по умолчанию. "Будет ли пользовательское пространство по умолчанию соответствовать границам моего пользовательского представления или это может бытьчто я создаю точку баsed с правой стороны отображает набор координат, и setPatternPhase реализует его для всей ширины spitview (включая левую половину)?
Будем весьма благодарны за любые предложения / советы / помощь, которые вы можете предоставить.
Редактировать: я загрузил копию проекта, чтобы вы могли увидеть поведение: http://dl.dropbox.com/u/6679821/ViewSwitcher.zip