2015-05-11 5 views
1

Я пытаюсь объявить некоторые функции CoreGraphics, в частности CGRectMake, и он продолжает говорить, что символ не найден.CGRectMake Symbol not Found

документов говорят, мне нужно импортировать CoreGraphics: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGGeometry/index.html#//apple_ref/c/func/CGRectMake

Путь к моему CoreGraphics является /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation; как я могу найти нужную библиотеку для этой функции? Я делаю это из ctypes.

Кстати, от чтения документов, кажется, просто memset CGRect и заполняет его ширину, высоту, x и y, это правда? (в этом случае мне не нужно будет объявлять об этом, это так просто).

ответ

1

В конце концов, я не мог экспортировать функцию, поэтому решение, которое я должен был использовать было определить функцию самостоятельно, я думаю, что он просто возвращал прямоугольник с заполненными полями, и он работал :)

CGRectMake: function() { 
     /* https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGGeometry/index.html#//apple_ref/c/func/CGRectMake 
     * CGRect CGRectMake (
     * CGFloat x, 
     * CGFloat y, 
     * CGFloat width, 
     * CGFloat height 
     *); 
     */ 
     /******* does not work 
     return lib('CoreGraphics').declare('CGRectMake', self.TYPE.ABI, 
      self.TYPE.CGRect, // return 
      self.TYPE.CGFloat, // x 
      self.TYPE.CGFloat, // y 
      self.TYPE.CGFloat, // width 
      self.TYPE.CGFloat // height 
     ); 
     */ 
     return function(x, y, width, height) { 
      return self.TYPE.CGRect(
       self.TYPE.CGPoint(x, y), 
       self.TYPE.CGSize(width, height) 
      ); 
     }; 
    } 
+2

Это необходимый подход. 'CGRectMake()' inlined. Он не экспортируется каркасом CoreGraphics (или любым другим). Компилятор обычно просто заменяет вызов прямой настройкой полей 'CGRect'. При определенных обстоятельствах функция будет существовать как отдельный объект, но будет встроена в * вызывающий * код (например, исполняемый файл приложения). –

+0

Большое спасибо @KenThomases! – Noitidart

+0

Btw @KenThomases есть где-нибудь в Интернете или вы можете показать мне, как на Mac, чтобы открыть его и увидеть содержимое CGRectMake встроенной функции? – Noitidart

1

У вас либо отсутствует импорт, либо большое место в другом месте, что мешает компилятору видеть это в контексте или опечатке.

При этом CGRect и NSRect идентичны в последних выпусках OS X. Вам просто нужно использовать CGRect при создании кода, который также будет скомпилирован для iOS.

+1

Я использую 'CGRect' все время на' OS X'; Я сомневаюсь, что это только для iOS. –

+1

Действительно. Исторически CGRect и NSRect были не то же самое, и их не было удобно заменять. Моя точка зрения - большинство API OS X по-прежнему используют NSRect и другие NS-префиксные конструкции C, даже если существует версия CG. Если вы строите кросс-платформенный код, вам нужно использовать CGRect или вам нужно делать глупые условные макросы на основе целевой платформы, потому что другие платформы Apple не знают NSRect. – uchuugaka

+1

CGRect был первоначально только для Core Graphics C API, который интересно МНОЖЕ моложе NSRect, который восходит к его префиксу 'namesake NeXT. (назад, когда не было Core Graphics API, а скорее API отображения PostScript) – uchuugaka

1

Если вы желаете, чтобы добавить CoreGraphics Framework затем:

1. Select Target 
2. Build Phases 
3. Link Binary With Libraries 
4. + 
5. CoreGraphics.framework 
6. Add 

enter image description here

+0

Спасибо @ILI, но я делаю это из ctypes, поэтому я нашел для нас полный путь, не могли бы вы поделиться со мной курсом, чтобы я мог попробовать ctypes. – Noitidart

+1

'/ System/Library/Frameworks/CoreGraphics.framework' или здесь:' /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/CoreGraphics .framework' –

+1

https://www.dropbox.com/s/zxkfhuhtsbue9xq/CoreGraphics.framework.dmg –

Смежные вопросы