Objective c NSCollectionView子类不';尽管设置需要显示,但在拖动会话期间不能调用drawRect
您好 我对NSCollectionView子类中应该如何以及何时调用drawRect感到困惑 我执行拖放操作,以便在集合中移动NSCollectionViewItems,并希望绘制拖放结束位置的视觉指示 该子类在拖动会话期间不调用drawRect。(在滚动过程中确实如此) 这是预定的操作吗? 欢迎提供有关如何正确实现此行为的任何提示 以下代码的完整xcode项目可从以下站点获得: 致意 更新: 示例代码是错误的。调用registerForDraggedTypes,使集合触发器drawRect符合预期 代码示例:Objective c NSCollectionView子类不';尽管设置需要显示,但在拖动会话期间不能调用drawRect,objective-c,cocoa,drag-and-drop,nscollectionview,Objective C,Cocoa,Drag And Drop,Nscollectionview,您好 我对NSCollectionView子类中应该如何以及何时调用drawRect感到困惑 我执行拖放操作,以便在集合中移动NSCollectionViewItems,并希望绘制拖放结束位置的视觉指示 该子类在拖动会话期间不调用drawRect。(在滚动过程中确实如此) 这是预定的操作吗? 欢迎提供有关如何正确实现此行为的任何提示 以下代码的完整xcode项目可从以下站点获得: 致意 更新: 示例代码是错误的。调用registerForDraggedTypes,使集合触发器drawRect符
@interface CollectionViewAppDelegate : NSObject <NSApplicationDelegate>
{
NSWindow *window;
NSMutableArray *collectionContent;
}
/* properties declaration */
/* KVC compliance declarations */
@end
@interface MyCollectionView : NSCollectionView
@end
@interface ItemModel
{
NSString *name;
}
@property (copy) NSString *name;
@end
@implementation MyCollectionView
- (void)awakeFromNib {
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSStringPboardType, nil]];
}
- (void)drawRect:(NSRect)rect {
NSLog(@"DrawRect");
}
- (void)mouseDragged:(NSEvent *)aEvent {
NSPoint localPoint = [self convertPoint:[aEvent locationInWindow] fromView:nil];
[self dragImage:[NSImage imageNamed:@"Move.png"]
at:localPoint
offset:NSZeroSize
event:aEvent
pasteboard:nil
source:self
slideBack:NO];
}
- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender {
return YES;
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
return NSDragOperationEvery;
}
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender {
[self setNeedsDisplay:YES];
return NSDragOperationEvery;
}
- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal {
return NSDragOperationEvery;
}
- (void)mouseDown:(NSEvent *)theEvent {
}
@end
@implementation CollectionViewAppDelegate
@synthesize window, collectionContent, collectionView;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSMutableArray *data = [[NSMutableArray alloc] init];
/* Fill in data */
[self setCollectionContent:data];
[data release];
}
/* dealloc */
/* KVC implementation */
@end
@implementation ItemModel
@synthesize name;
/* dealloc */
@end
@接口集合ViewAppDelegate:NSObject
{
NSWindow*窗口;
NSMutableArray*集合内容;
}
/*财产申报*/
/*KVC合规声明*/
@结束
@接口MyCollectionView:NSCollectionView
@结束
@接口项模型
{
NSString*名称;
}
@属性(副本)NSString*名称;
@结束
@MyCollectionView的实现
-(无效)从NIB中唤醒{
[self-RegisterForDragedTypes:[NSArray arrayWithObjects:NSStringPboardType,nil]];
}
-(void)drawRect:(NSRect)rect{
NSLog(@“DrawRect”);
}
-(无效)鼠标标记:(NSEvent*)aEvent{
NSPoint localPoint=[self convertPoint:[aEvent locationInWindow]fromView:nil];
[自绘制:[NSImage ImageName:@“Move.png”]
地点:localPoint
偏移量:NSZeroSize
事件:aEvent
纸板:无
资料来源:赛尔夫
滑回:否];
}
-(BOOL)prepareForDragOperation:(id)发送方{
返回YES;
}
-(NSDragOperation)DragginGeted:(id)发送方{
返回NSDragOperationEvery;
}
-(NSDRAGO操作)draggingUpdated:(id)发送方{
[自我设置需要显示:是];
返回NSDragOperationEvery;
}
-(NSDragOperation)DragingSourceOperationMaskForLocal:(BOOL)isLocal{
返回NSDragOperationEvery;
}
-(无效)鼠标向下移动:(n事件*)事件{
}
@结束
@实现集合ViewAppDelegate
@综合窗口、集合内容、集合视图;
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知{
NSMUTABLEARRY*数据=[[NSMUTABLEARRY alloc]init];
/*填写数据*/
[自我设置收集内容:数据];
[数据发布];
}
/*解除锁定*/
/*KVC实现*/
@结束
@实现项模型
@综合名称;
/*解除锁定*/
@结束
我认为您无法成功地将NSCollectionView
的绘图例程子类化。在内部,集合视图被放置在核心动画层中,因此-drawRect:
不用于渲染其内容。谢谢您的回答,您是对的。但是,在我修复了对registerForDraggedTypes缺少的调用之后,drawRect在示例中按预期进行了调用。问题仍然存在于我的全尺寸应用程序中。我一直在调查。