Имам приложение, в което създавам два подизгледа на главния прозорец, подизгледите са от клас, наречен Page, и на всеки подизглед поставям друг подизглед на клас, наречен Ad. Плъзгам рекламните класове между подизгледите на страницата. Първоначално просто нулирах рамката на изгледа на рекламния клас, но това, което наистина искам да направя, е да я поставя там, където се случва събитието NSLeftMouseUp.
Моят процес за това е да регистрирам всички подизгледи на страници в масив, докато се създават. След това направих подклас на NSWindow и присвоих този клас на главния ми прозорец в IB. Предавам масива от изгледи на страници към този клас.
Мисля, че презаписвам метода sendEvent, като проверявам дали събитието е NSLeftMouseDown, NSLeftMouseDragged или NSLeftMouseUp. NSLeftMouseDown трябва да провери и да види дали кликнатият подизглед е най-дълбокият подизглед на йерархията на прозореца - прозорец->Клас на страница->Клас на реклама, тъй като искам да премествам реклами, а не страници. Преминавам през масива и след това проверявам метода descendentOf на кликнатия NSView (Ad), за да видя дали е потомък на изброения NSView (страница). (Надявам се, че има смисъл). След това дърпам и рамката му.
В NSLeftMouseDragged променям курсора, за да прилича на рекламата, която се влачи.
В NSLeftMouseUp проверявам към какъв изглед търсим да преместим рекламата. Това, което не мога да разбера, е как да получа NSPoint за NSLeftMouseUp на този изглед, мога да го получа за прозореца, но x/y на тази точка ще бъде далеч за получаващия подизглед... как да извлека NSPoint в подизгледа?
...
} else if ([e type] == NSLeftMouseUp) {
//get which view we are going to drop the ad on
landingView = [[self contentView] hitTest:[e locationInWindow]];
/****ui question here for Mike:
if the mouseup event is not on a page class, should the mouse remain the dragcursor image here or should
we change it back to the mouse icon and stop this process****/
if ([[landingView className] isEqual:@"Page"]) {
//get ad rect
float adX = thisAdFrame.origin.x + 10.0;
float adY = thisAdFrame.origin.y + 20.0;
//get nspoint of mouse up event
NSPoint p = [e locationInWindow];
[landingView addSubview:theSubView];
[theSubView setFrame:NSMakeRect(p.x, p.y, thisAdFrame.size.width, thisAdFrame.size.height)];
}
}
...