2010-04-21 39 views
8

Câu hỏi về iPhone SDK: Tôi đang vẽ UIImageView trên màn hình. Tôi đã xoay nó ở chế độ 3D và cung cấp một chút quan điểm, vì vậy hình ảnh có vẻ như nó đang trỏ vào màn hình ở một góc. Tất cả đều hoạt động tốt. Bây giờ vấn đề là các cạnh của hình ảnh kết quả dường như không bị khử răng cưa chút nào. Có ai biết cách làm thế không?iPhone: CALayer + xoay trong 3D + antialias?

Về cơ bản, tôi đang triển khai phiên bản CoverFlow của riêng mình (vâng vâng, bằng sáng chế thiết kế blah blah) bằng cách sử dụng phép biến đổi 3d thạch anh để làm mọi thứ. Nó hoạt động tốt, ngoại trừ mỗi trang bìa không phải là antialiased, và phiên bản Apples là.

Tôi đã thử rối tung xung quanh với các edgeAntialisingMask của CALayer, nhưng điều đó không giúp - giá trị mặc định là mỗi cạnh nên được chống răng cưa ...

cảm ơn!

+0

Bạn đang thiết lập 'edgeAntialiasingMask' cho 'kCALayerLeftEdge | kCALayerRightEdge | kCALayerTopEdge | kCALayerBottomEdge'? – rpetrich

+0

vâng, đã thử điều đó. Ngoài ra, sự kết hợp đó là mặc định cho thuộc tính đó – Colin

+0

Dường như các điểm cạnh trong suốt là con đường để đi tới (theo cách đó 'magnificationFilter' và' minificationFilter' sẽ xử lý nó) – rpetrich

Trả lời

3

Bạn có thể thử thêm một số pixel trong suốt xung quanh cạnh của hình ảnh bằng cách đặt UIImageView ở chế độ xem trống lớn hơn một chút mà bạn áp dụng xoay vòng hoặc bằng cách thay đổi hình ảnh nguồn.

+1

Đặt 'UIImageView' ở chế độ xem lớn hơn và sau đó áp dụng một biến đổi sẽ không có hiệu lực - các lớp con không được tổng hợp thành cha mẹ của chúng, thay vì toàn bộ đồ thị được tổng hợp bởi GPU. Việc thêm các pixel trong suốt vào cạnh của hình ảnh sẽ hoạt động tốt. – rpetrich

19

Nếu bạn chỉ xoay một hình ảnh, hơn một mẹo sẽ giải quyết được sự cố. Hãy thử đặt

layer.shadowOpacity = 0,01;

Sau khi hình ảnh đó trông mượt mà hơn sau khi quay 3D

+1

người đàn ông mà câu trả lời xứng đáng là một huy hiệu vàng! – apouche

+1

Nếu nó hoạt động, nó sẽ được upvoted! – tipycalFlow

7

Câu trả lời Gloomcore cho kết quả thực sự gọn gàng.

tuy nhiên điều này đôi khi làm cho mọi thứ thực sự LAGGY! Thêm tính năng rasterization giúp một chút:

.layer.shadowOpacity = 0.01; 
.layer.shouldRasterize = YES; 

Tôi biết câu hỏi/câu trả lời là cũ, nhưng hey tôi vừa tìm thấy nó.

+0

Có, việc thêm rasterization sẽ giúp chỉ một chút. Nhưng nó vẫn còn laggy, thật không may. –

0

Tôi gặp sự cố tương tự đã được giải quyết bằng cách chỉ thiết lập shouldRasterize = YES, tuy nhiên vì tôi đã sử dụng lại chế độ xem (và lớp) của mình, shouldRasterize = YES đã giết hiệu suất.

May mắn là tôi đã tìm được giải pháp bằng cách chuyển shouldRasterize = NO vào đúng thời điểm để khôi phục hiệu suất trong trường hợp ứng dụng của tôi.

tôi đăng một giải pháp ở đây: Antialiasing edges of UIView after transformation using CALayer's transform

0

Bạn có thể thử phương pháp

này: Sử dụng layer.shouldRasterize

  1. Tạo một superlayer/superview đó là 1 pixel lớn hơn trong tất cả 4 hướng
  2. Thực hiện phép biến đổi trên superlayer/superview
  3. Enable layer.shouldRasterize trên bản gốc layer/view

Phương pháp: Vẽ một UIImage

  • Vẽ nội dung của bạn đến một UIImage
  • Hãy chắc chắn rằng bạn có một đường viền trong suốt của 1 pixel quanh nội dung
  • Hiển thị hình ảnh

tham khảo: http://darknoon.com/2012/05/18/the-transparent-border-trick/

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