5

Tôi đang định cấu hình BEMSimpleLineGraph của mình và đã có thể thực hiện thành công ngoại trừ tô bóng gradient tuyến tính. Sau khi tham khảo mã này trong ví dụ được cung cấp dự án obj-CCGContextDrawLinearGradient gây 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); 

và sao chép nó vào trong này 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) 

tất cả mọi thứ được xây dựng một cách chính xác nhưng ném lên các lỗi bộ nhớ EXC_BAD_ACCESS trong file BEMLine.m bao gồm, dừng tại dòng này

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

Tôi đã bao gồm tiêu đề cầu nối obj-c, thêm khung CoreGraphics, bật màu dưới cùng trong ngăn thuộc tính của lại chế độ xem ViewController trong Storyboard, tham chiếu các trang Phát triển của Apple để đảm bảo các kiểu dữ liệu chính xác của tất cả các tham số, nhưng vẫn đang bị khô. Khi kiểm tra các điểm tương đồng lỗi, tôi cũng nhận ra rằng cùng một lỗi xuất hiện với việc cố gắng vẽ gradient tuyến tính trên cùng. Lỗi này dường như nằm trong mã Obj-C cố gắng vẽ gradient, nhưng một lần nữa tôi không biết phải làm gì.

+0

tâm chia sẻ báo cáo sự cố đầy đủ (tệp '.crash')? –

+0

@ JohannesWeiß cảm ơn bạn đã trả lời! Tôi đã tải nó lên đây cho bạn: (https://drive.google.com/file/d/0ByFqolB5nSXKU1JhYjlYVlpjWTQ/view?usp=sharing) –

+0

Tôi đã xem và có vẻ như 'self.bottomGradient' không phải là nil/NULL nhưng đang trỏ đến một chút bộ nhớ không chứa gradient hợp lệ. –

Trả lời

5

Tôi gặp vấn đề tương tự khi sử dụng BEMSimpleLineGraph từ Swift. May mắn tôi đã tìm thấy một câu trả lời trên trang các vấn đề của các thư viện Github:

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

Để giải quyết vấn đề này, tôi chỉ tuyên bố một gradient toàn cầu trong lớp Swift, như vậy:

var gradient : CGGradient? 

và chỉ cần thay thế dòng

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

với:

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

Dường như, độ dốc sẽ không được phân bổ trong bộ nhớ và tại thời điểm thư viện cần sử dụng nó, nó không còn khả dụng nữa.

+0

đã giải quyết được vấn đề của tôi! Cảm ơn bạn! –

0

Một điều tôi lưu ý là trong mã thiết lập bạn sử dụng self.myGraph.gradientBottom trong khi ở mã vẽ bạn sử dụng self.bottomGradient.

Chúng có giống nhau không? Hay bạn quên gán một giá trị cho cái sau?

+0

Mã vẽ self.bottomGradient là Obj-C được cung cấp bởi thư viện biểu đồ BEMSimpleLineGraph, vì vậy tôi không chắc chắn đó là vấn đề, nhưng tôi đánh giá cao –

Các vấn đề liên quan