2015-07-04 17 views
5

Tôi có hai đoạn mã, một trong số đó hoạt động hoàn hảo (phiên bản iOS) và phiên bản kia không hoạt động chính xác (phiên bản Mac). Tôi không thể tìm ra vấn đề gì với phiên bản Mac, sử dụng NSBezierPath, thay vì UIBezierPath.UIBezierPath và NSBezierPath tạo ra các kết quả khác nhau khi vẽ vòng cung

iOS Version

Tôi có một đoạn mã mà hoạt động chính xác như tôi muốn sử dụng trên iOS UIBezierPath. Dưới đây là các mã:

let center = CGPoint(x: size.width/2.0, y: size.height/2.0) 
let radius = size.width/2.0 
let startAngle = angle 
let endAngle = 180.0 - startAngle 

let bezierPath = UIBezierPath() 
bezierPath.addArcWithCenter(center, radius: radius, startAngle: startAngle.radians, endAngle: endAngle.radians, clockwise: true) 
println(bezierPath) 
return bezierPath 

Nó xuất ra như sau

<UIBezierPath: 0x7fe348f82910; <MoveTo {42.677669529663689, 42.677669529663689}>, 
<CurveTo {7.3223304703363148, 42.677669529663689} {32.914562235881945, 52.440776823445439} {17.085437764118062, 52.440776823445432}> 

và hiển thị các hình ảnh sau đây

correct shape

Mac OS X Version

này không exa ctly những gì tôi muốn, ngoại trừ việc nó dành cho iOS. Tôi muốn dịch mã này sang OS X/Cocoa. Dưới đây là những gì tôi đã đưa ra với

let center = CGPoint(x: size.width/2.0, y: size.height/2.0) 
let radius = size.width/2.0 
let startAngle = angle 
let endAngle = 180.0 - startAngle 

let bezierPath = NSBezierPath() 
bezierPath.appendBezierPathWithArcWithCenter(center, radius: radius, startAngle: startAngle.radians, endAngle: endAngle.radians, clockwise: true) 
println(bezierPath) 
return bezierPath 

(nó gần giống với mã iOS).

Sản lượng ở đây là

Path <0x600000122800> 
Bounds: {{-4.9018102839097546e-05, -4.9018102839077596e-05}, {50.000098036205685, 50.000094758067902}} 
Control point bounds: {{-0.18691031775632938, -0.18691031775632855}, {50.373820635512658, 50.37016203886877}} 
49.997651 25.342684 moveto 
50.186910 11.536862 39.148505 0.191608 25.342684 0.002349 curveto 
11.536862 -0.186910 0.191608 10.851495 0.002349 24.657316 curveto 
-0.186910 38.463138 10.851495 49.808392 24.657316 49.997651 curveto 
38.196255 50.183252 49.422202 39.556558 49.978864 26.027794 curveto 

với hình dạng sau kết quả

incorrect result

Cả hai đoạn mã được cho các đầu vào tương tự và sử dụng các phương pháp tương tự cho máy tính radian, vv Như xa như tôi có thể nói, mọi thứ đều giống nhau giữa hai loại, ngoài đầu ra. Nó cũng đáng chú ý là tôi đang chuyển đổi từng đường dẫn thành UIImage s và NSImage sau khi chúng được vẽ. Vui lòng cho tôi biết nếu tôi nên đăng mã mà tôi đang sử dụng để thực hiện việc này.

Tôi cũng đã thử sử dụng moveToPoint để nhận cả hai phần mã vào đúng vị trí bắt đầu (không cần thiết trên iOS, không khắc phục sự cố trên OS X).

Cảm ơn rất nhiều sự giúp đỡ của bạn.

+1

Có thể tìm thấy giải pháp - có lẽ phiên bản Cocoa yêu cầu các góc theo độ chứ không phải là radian? [Xem tại đây] (http://stackoverflow.com/questions/6704372/is-there-an-ios-equivalent-of-appendbezierpathwitharcwithcenter). Sẽ cập nhật khi tôi nhận được giải pháp. – matthewpalmer

Trả lời

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