5

Konfiguruję mój BEMSimpleLineGraph i udało mi się to zrobić z powodzeniem, z wyjątkiem cieniowania gradientu liniowego. Po przedstawieniu tego kodu w projekcie pod warunkiem przykład Obj-CCGContextDrawLinearGradient powoduje EXC_BAD_ACCESS

CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); 
    size_t num_locations = 2; 
    CGFloat locations[2] = { 0.0, 1.0 }; 
    CGFloat components[8] = { 
     1.0, 1.0, 1.0, 1.0, 
     1.0, 1.0, 1.0, 0.0 
    }; 
    self.myGraph.gradientBottom = CGGradientCreateWithColorComponents(colorspace, components, locations, num_locations); 

i zapisywania go do tego w Swift:

let colorspace:CGColorSpaceRef = CGColorSpaceCreateDeviceRGB() 
     let num_locations:size_t = 2 
     var locations: [CGFloat] = [0.0, 1.0] 
     var components: [CGFloat] = [ 
      1.0, 1.0, 1.0, 1.0, 
      1.0, 1.0, 1.0, 0.0 
     ] 

     self.myGraph.gradientBottom = CGGradientCreateWithColorComponents(colorspace, components, locations, num_locations) 

wszystko buduje poprawnie, ale rzuca się błąd pamięci EXC_BAD_ACCESS w pliku BEMLine.m włączone, zatrzymując się na tej linii

CGContextDrawLinearGradient(ctx, self.bottomGradient, CGPointZero, CGPointMake(0, CGRectGetMaxY(fillBottom.bounds)), 0); 

podaję Obiektu-c pomostowego nagłówka dodane CoreGraphics ramy, włączony dolny koloru w okienku atrybutów ponownego spektyw ViewController w Storyboard, odwołuje się do stron Development firmy Apple, aby zapewnić poprawne typy danych wszystkich parametrów, ale wciąż dochodzę do wyschnięcia. Sprawdzając podobieństwa błędów, zdałem sobie również sprawę, że ten sam błąd pojawia się również przy próbie narysowania górnego gradientu liniowego. Wydaje się, że błąd leży w kodzie Obj-C, który próbuje narysować gradient, ale znowu nie mam pojęcia, co robić.

+0

Umysł udostępnienia pełnego raportu awarii ("plik .crash")? –

+0

@ JohannesWeiß dziękuję za odpowiedź! Przesłałem go tutaj: (https://drive.google.com/file/d/0ByFqolB5nSXKU1JhYjlYVlpjWTQ/view?usp=sharing) –

+0

Miałem wygląd i wygląda na to, że 'self.bottomGradient' nie jest zerowe/NULL, ale wskazuje na odrobinę pamięci, która nie zawiera poprawnego gradientu. –

Odpowiedz

5

Miałem ten sam problem podczas korzystania z BEMSimpleLineGraph od Swift. Na szczęście znalazłem odpowiedzi na stronie kwestie bibliotek Github:

https://github.com/Boris-Em/BEMSimpleLineGraph/issues/105

W celu rozwiązania tego problemu, po prostu ogłosił globalny gradientu w Swift klasy, tak jak poniżej:

var gradient : CGGradient? 

i po prostu zastąpić linię

self.myGraph.gradientBottom = CGGradientCreateWithColorComponents(colorspace, components, locations, num_locations) 

z:

self.gradient = CGGradientCreateWithColorComponents(colorspace, components, locations, num_locations) 
self.myGraph.gradientBottom = self.gradient 

Wygląda na to, że gradient w przeciwnym razie nie zostanie przydzielony w pamięci i w chwili, gdy biblioteka będzie go potrzebować, nie będzie już dostępny.

+0

rozwiązał mój problem! Dziękuję ci mjrehder! –

0

Jedną rzeczą, którą zauważam jest to, że w kodzie instalacji używasz self.myGraph.gradientBottom, podczas gdy w kodzie rysunku używasz self.bottomGradient.

Czy to powinno być takie samo? A może zapomniałeś przydzielić wartość drugiemu?

+0

Kod rysowania self.bottomGrient był Obj-C wstępnie dostarczony przez bibliotekę do rysowania BEMSimpleLineGraph, więc nie jestem pewien, czy to jest problem, ale doceniam Odpowiedź: –

Powiązane problemy