-(void)drawRect : (NSRect)rect
{
imgRect.orgin = NSZeroPoint;
imgRect.size = [appleImage size];
drawRect = [self bounds];
[appleRect drawInRect:appleRect
fromRect:imgRect
operation:NSCompositeSourceOver
fraction:1.0];
...
}
我正在尝试这一点,但这并不容易让我发疯。
如何将NSRect类型代码更改为CGRect类型代码?
PLZ帮忙!
PS。我已经知道.. NSRect - > CGRect,NSZeroPoint - > CGRectZero
答案 0 :(得分:17)
只需使用这两个Cocoa(无iOS)功能:
CGRect NSRectToCGRect(NSRect nsrect);
NSRect NSRectFromCGRect(CGRect cgrect);
请看这里加深主题:http://cocoadev.com/CGRect
答案 1 :(得分:5)
如果您在iOS中遇到此问题,例如UIKeyboardFrameEndUserInfoKey
,则必须知道NSRect
是NSValue
的子类。
if let rectValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue {
let rect = rectValue.CGRectValue()
// Use your CGRect
}
答案 2 :(得分:0)
假设您使用的是Apple的Foundation,而不是GNUStep或其他奇怪的东西...
NSRect
is just a typedef
of CGRect
(第NSGeometry.h
行第30行),因此您可以在任何地方简单地使用其中一个来代替另一个。
void takeCgRect(CGRect rect) {
NSLog(@"A core graphics rectangle at %@ with size %@", NSStringFromCGPoint(rect.origin), NSStringFromCGSize(rect.size))
}
void takeNsRect(NSRect rect) {
NSLog(@"A NeXTStep rectangle at %@ with size %@", NSStringFromPoint(rect.origin), NSStringFromSize(rect.size))
}
// ELSEWHERE:
NSRect nsTest1 = NSRectMake(1, 2, 3, 4)
CGRect cgTest1 = CGRectMake(1, 2, 3, 4)
CGRect cgTest2 = CGRectMake(100, 200, 300, 400)
NSLog(@"%@", @(nsTest1 == cgTest1)) // 1
takeCgRect(nsTest1) // A core graphics rectangle at {1.0, 2.0} with size {3.0, 4.0}
takeNsRect(cgTest2) // A NeXTStep rectangle at {100.0, 200.0} with size {300.0, 400.0}
在Swift中,NSRect
is just a typealias
of CGRect
(NSGeometry.swift
第435行),因此您可以在任何地方简单地使用另一个。
let nsTest1 = NSRect(x: 1, y: 2, width: 3, height: 4)
let cgTest1 = CGRect(x: 1, y: 2, width: 3, height: 4)
let cgTest2 = CGRect(x: 100, y: 200, width: 300, height: 400)
print(nsTest1 == cgTest1) // true
func takeCgRect(_ rect: CGRect) {
print("A core graphics rectangle at \(rect.origin) with size \(rect.size)")
}
func takeNsRect(_ rect: NSRect) {
print("A NeXTStep rectangle at \(rect.origin) with size \(rect.size)")
}
takeCgRect(nsTest1) // A core graphics rectangle at (1.0, 2.0) with size (3.0, 4.0)
takeNsRect(cgTest2) // A NeXTStep rectangle at (100.0, 200.0) with size (300.0, 400.0)
答案 3 :(得分:0)
SWIFT 5
它对我有用。在 let 之前使用 'if'。
let keyboardFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
print("\(String(describing: keyboardFrame?.height))")