- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 NSView 的子类上绘制了一个 NSImage。在上一个问题中,我被帮助将它画在左上角。现在,我希望能够旋转图像。我有一个按钮可以增加旋转变量 %4,然后将其乘以 -90 来找到旋转角度。然后,我使用 NSAffineTransform 旋转图像,并将其平移回屏幕上。然而,它似乎并没有按照我期望的方式工作。我有两个问题。
1) 当我旋转时,图像中不在前一帧的区域中的部分会被正确绘制。然而,之前的药水却依然是原来的图像。这意味着经过几次旋转后,原始直立图像会出现一个正方形,然后旋转图像下方或左侧会出现一个矩形。
2) 当我重新调整窗口大小时,图像会以原始直立方向(不应如此)重新绘制(应如此)。
基本上,我得出的结论是 NSAffineTransform 并不像我想象的那样工作。还有其他方法可以旋转(和平移)图像吗?谢谢
大代码块:(“WORKS”和“end Works”之间的代码是仅绘制图像的工作代码。它来 self 之前的问题)。
[旧代码已删除,用新代码替换较低的代码]
谢谢
编辑:更多的研究发现,我可以旋转 View ,而不是进行 NSAffineTtransform。这似乎效果更好。但是,我无法让翻译完全正常工作。下面是新代码(删除原始代码以节省空间)
- (void)drawRect:(NSRect)rect
{
//WORKS
NSRect frame;
frame.origin = NSZeroPoint;
frame.size = [image size];
// end works
float deltaX, deltaY, height, width;
// if the rotate button was just clicked, we need to rotate by 90 deg, otherwise not
double rotateDeg = justRot ? -90.0 : 0;
justRot = NO;
// rotate
deltaX = 0;
deltaY = 0;
// translate to account for rotation
height = [image size].height;
width = [image size].width;
switch (rotation)
{
case 0:
NSLog(@"No rotation ");
break;
case 1:
deltaX += width;
break;
case 2:
deltaX += width;
deltaY += height;
break;
case 3:
deltaY += height;
break;
}
NSPoint orig;
if (rotation != 0)
{
orig.x = -100;
orig.y = -100;
}
[self rotateByAngle: rotateDeg];
NSLog(@"orig %f %f", orig.x, orig.y);
// WORKS
[self setFrame: frame];
[image drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];
// end works
[self translateOriginToPoint: orig];
}
最佳答案
好吧,对于历史,如果其他人有这个问题,这是我想出的答案:
框架旋转保留在drawRect中,其他所有内容都移动到旋转方法:
-(void)rotate
{
float deltaX, deltaY, height, width;
rotation = (rotation +1) % 4 ;
deltaX = 0;
deltaY = 0;
// translate to account for rotation
height = [image size].height;
width = [image size].width;
switch (rotation)
{
case 0:
NSLog(@"No rotation ");
deltaY -= width;
break;
case 1:
deltaY -= height;
break;
case 2:
deltaX += height-width;
deltaY -= height ;
break;
case 3:
deltaX += height-width;
deltaY -= width;
break;
}
NSPoint orig;
orig.x = deltaX;
orig.y = deltaY;
[self rotateByAngle: 90.0];
[self translateOriginToPoint: orig];
[self setNeedsDisplay:YES];
}
关于objective-c - 使用或不使用 NSAffineTransform 旋转 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1294148/
我对在 Cocoa 中绘图还很陌生,并且正在开发一个涉及六边形网格的实验性应用程序。为了简化这个过程,我想倾斜坐标系,使 Y 轴向左旋转 30 度。我在Apple的Cocoa Drawing Guid
我想使用 NSAffineTransform 但没有收到警报: "Unknown type name 'NSAffineTransform' did you mean 'CGAffineTransfo
我有一个 NSView 的子类,我正在其中绘制一个 NSImage。我取消 NSAffineTransforms 来旋转、平移和缩放图像。 大部分工作正常。然而,有时,转换似乎没有被激活。 例如,当我
有人有任何好的例子来解释 NSAffinetransform 和 CGAffinetransform 之间的区别吗?谢谢 最佳答案 简单答案:NSAffinetransform 适用于 Mac osx
我想对 NSView 子类进行一些简单的转换,以在 X 轴、Y 轴或两者上翻转它。我是一名经验丰富的 iOS 开发人员,但我就是不知道如何在 macOS 中做到这一点。我已经创建了一个具有所需翻译和比
我正在尝试将 iOS 代码转换为 OSX 代码,但在图形移植方面遇到了一些困难。 在 iOS 下我有这个: NSRect rect = NSMakeRect(centerX.doubleValue -
我使用[NSGraphicsContext currentContext]获取上下文,如何获取当前应用于它的NSAffineTransform? 我需要这个来实现我自己的转换堆栈,我可以在其中执行 p
我在 NSView 的子类上绘制了一个 NSImage。在上一个问题中,我被帮助将它画在左上角。现在,我希望能够旋转图像。我有一个按钮可以增加旋转变量 %4,然后将其乘以 -90 来找到旋转角度。
这是一个相当简单的问题,我确信它并不难,但问题是...... 我有一个居中的 NSpanel,然后在居中之后我需要进行变换以在 Y 坐标上向下移动窗口,同时保持居中的 X 坐标。 NSAffineTr
当应用 NSAffineTransform 旋转和平移到 NSRect 时,所有 subview 都不会受到变换的影响。我已经包含了下面的代码。 - (void)drawRect:(NSRect)di
我是一名优秀的程序员,十分优秀!