NSTableView
셀에서 '롤오버'커서가있는 동안 '정보'아이콘을 표시하려고합니다. 셀의 이미지 사본을 가져오고, '정보'아이콘을 그려서 셀에이 사본으로 setImage를 알려줍니다. 아이콘 만 그려서 크기를 조정하면 테이블의 이미지 크기가 달라서 모든 아이콘이 같은 크기가되지 않습니다. 나는 크기를 조정하거나 올바른 크기의 아이콘을 배치하는 데 문제가 없습니다.tableView에서 이미지 재설정 imageCell이 흐림
내 문제는 교체 된 이미지가 다소 흐릿이며, 그것의 가장자리가 정밀 검사에 선명하지 을 점이다. 가장자리가 없으므로 mouseEntered가 발생하고 이미지가 바뀌면 약간 움직이는 것처럼 보입니다.
난 (CGBitmapContext
그리기 또는 합성 CIFilter
사용)에 NSImage
lockFocus
를 사용 doen't 도면 다수의 기술을 시도한, 그들은 동일한 결과를 생성한다.
가 willDisplayCell
에 그리기 예측할 수없는 것 같습니다으로 나는 NSTableView
의 preparedCellAtColumn
을 사용하고 있습니다 - 어디 선가 읽을 수 있지만 위치를 기억 할 수 없다. 여기
preparedCellAtColumn
방법 : - (NSCell *)preparedCellAtColumn:(NSInteger)column row:(NSInteger)row
{
NSCell *cell = [super preparedCellAtColumn:column row:row];
if ((self.mouseOverRow == row) && column == 0) {
NSCell * imageCell = [super preparedCellAtColumn:0 row:row];
NSImage *sourceImage = [[imageCell image] copy];
NSRect cellRect = [self frameOfCellAtColumn:0 row:row];
NSSize cellSize = cellRect.size;
NSSize scaledSize = [sourceImage proportionalSizeForTargetSize:cellSize];
NSImage *outputImage = [[NSImage alloc] initWithSize:cellSize];
[outputImage setBackgroundColor:[NSColor clearColor]];
NSPoint drawPoint = NSZeroPoint;
drawPoint.x = (cellSize.width - scaledSize.width) * 0.5;
drawPoint.y = (cellSize.height - scaledSize.height) * 0.5;
NSRect drawRect = NSMakeRect(drawPoint.x, drawPoint.y, scaledSize.width, scaledSize.height);
NSPoint infoPoint = drawPoint;
infoPoint.x += NSWidth(drawRect) - self.infoSize.width;
[outputImage lockFocus];
[sourceImage drawInRect:drawRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
[self.infoImage drawAtPoint:infoPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
[outputImage unlockFocus];
[cell setImage:outputImage];
}
return cell;
}
[이 스캇 스티븐슨에서 동봉 스케일링 방법] 내가 10.6을 지원해야
- (NSSize)proportionalSizeForTargetSize:(NSSize)targetSize
{
NSSize imageSize = [self size];
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = targetSize.width;
CGFloat targetHeight = targetSize.height;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;
if (NSEqualSizes(imageSize, targetSize) == NO)
{
CGFloat widthFactor;
CGFloat heightFactor;
widthFactor = targetWidth/width;
heightFactor = targetHeight/height;
if (widthFactor < heightFactor)
scaleFactor = widthFactor;
else
scaleFactor = heightFactor;
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
}
return NSMakeSize(scaledWidth,scaledHeight);
}
, 그래서 끝내 새 사용할 수 없습니다 사자 방법. 당신의 고려
덕분에 ...
감사합니다. Rob. 기이하게도이 방법은 셀의 높이에 맞게 크기가 조정 된 이미지에서 작동하지만 높이보다 작지 만 너비를 채우는 크기 조정 된 이미지의 경우 '흐림'이 여전히 존재합니다. 나는 이것이 다른 문제를 지적하고 있다고 생각하기 때문에이 점을 표시하고 있습니다. 뷰 원점 좌표와 스케일링과는 다른 문제가 될 수 있습니다. – lulu