我正在使用 Objective-C 在 Xcode 中编写一个 OSX 应用程序。我有一个窗口,里面有一个 NSView,并且 NSView 应该使用包含 NSNumbers 的 NSMutableArray 中的数据在网格上绘制相应的图像,以便在 0,0 处绘制图像;32,0; 64,0 . . . 0,32; 32,32; 等等。因此,数组的计数是网格的 W*H,在本例中为 21*21 或 441。
您左键单击以“放置”图像,这实际上只是意味着根据您单击的位置更新数组,然后调用 setNeedsDisplay:YES 以便它重新绘制自身以反映更新后的数组。到目前为止,我可以让它正确地根据数组绘制图像。
但是,当您右键单击时,它应该将特定网格槽中的图像旋转一定量。我在这里遇到的唯一问题是弄清楚如何在适当的位置实际绘制旋转的图像。它们应该围绕它们的中心点旋转,这将是 16,16 的相对坐标(所有图像的大小都是 32x32 像素)。事实上,我的代码是:
- (void)drawRect:(NSRect)dirtyRect
{
[super drawRect:dirtyRect];
//Black background
[[NSColor blackColor] setFill];
NSRectFill(dirtyRect);
// Drawing code here.
NSRect rectToDraw = CGRectMake(0,0,32,32);
NSInteger imageIndex = 0;
NSImage *imageToDraw = nil;
for (int i = 0; i < [objDataArray count]; i++) {
//Loop through data array and draw each image where it should be
if ([objDataArray objectAtIndex:i]==[NSNull null]) continue; //Don't draw anything in this slot
//Math to determine where to draw based on the current for loop index
//0 = 0,0; 1 = 32,0 . . . 20 = 640,0; 21 = 0,32; etc. (grid is 21x21)
rectToDraw.origin.x = (i % 21)*32;
rectToDraw.origin.y = floor(i/21)*32;
//Get the data at this index in the data array
imageIndex = [((NSNumber*)[objDataArray objectAtIndex:i]) integerValue];
//Use the retrieved number to get a corresponding image
imageToDraw = (NSImage*)[objImagesArray objectAtIndex:imageIndex];
//Draw that image at the proper location
[imageToDraw drawInRect:rectToDraw];
}
}
所以说以度为单位的旋转量由变量rotationAmount 指定。如何更改 drawInRect 线(右大括号之前的最后一行),以便图像在 rectToDraw 指定的正确位置绘制,但围绕其中心旋转rotationAmount 度数?
谢谢。