2011-08-12 24 views
7

Tôi có một NSImageView tải một hình ảnh từ gói ứng dụng.Thay đổi kích thước NSImageView không vẽ lại

Nó được thiết lập như vậy:

coverImage.image = [NSImage imageNamed:@"themeSignEnd.png"]; 
coverImage.imageScaling = NSImageScaleNone; 
coverImage.imageAlignment = NSImageAlignLeft; 

Các hiển thị hình ảnh tốt.

Kích thước của NSImageView được tính toán dựa trên một số yếu tố khác và sau đó thiết lập sử dụng mã này:

coverImage.frame = CGRectMake((1280 - 869)/2, 0, 869 * percentage, 800); 

này hoạt động hoàn toàn tốt đẹp lần đầu tiên nó được thực hiện (khi ra mắt ứng dụng).

NSImageView có kích thước và hình ảnh chứa được cắt ở đường viền thích hợp.

Thật không may, khi tôi cố gắng thay đổi kích thước NSImageView trong khi ứng dụng đang chạy (sử dụng cùng một mã ở trên), nó sẽ không cập nhật rõ ràng.

NSLogging coverImage.frame cho biết rằng chính khung được cập nhật chính xác. Tuy nhiên, chế độ xem có vẻ không được vẽ lại - không phải khi thu nhỏ cũng như khi phát triển khung. Ngoài ra, khi tôi thoát và khởi động lại ứng dụng, NSImageView vẽ đường viền chính xác.

Điều gì có thể gây ra hành vi như vậy?

Có thể NSImageView đơn giản không được vẽ lại? Nếu vậy, làm thế nào tôi có thể buộc vẽ lại?

Có bất kỳ quirks nào khác của NSImageView mà tôi đã bỏ lỡ có thể dẫn đến hành vi này không?

chỉnh sửa:

Hóa ra lỗi này chỉ xảy ra khi tài sản ImageFrameStyle được thiết lập để NSImageFrameNone. Nếu khung được đặt thành bất kỳ thứ gì khác, nó sẽ được vẽ lại tốt. Thật không may, chúng tôi cần hình ảnh được hiển thị mà không có khung.

Có sự khác biệt nào về hiển thị cho NSImageViews có và không có khung có thể giải thích điều này không?

+0

Bạn đang cập nhật khung của khung nhìn từ chuỗi chính? –

+0

@Rob -> Có, tôi. – 0x90

+0

Tôi ước có một giải pháp cho việc này. Nếu bạn đã khám phá bất kỳ điều gì mới, vui lòng đăng nó. Thay đổi kiểu khung không có hiệu lực đối với tôi. Thật thú vị, thay đổi kích thước lớn hơn sẽ vẫn vẽ hình ảnh của tôi và cập nhật nó. Nếu tôi đổi kích thước nhỏ hơn, nó sẽ ngừng cập nhật. – spartygw

Trả lời

1

Vì vậy, tôi đã tìm ra cách để giải quyết vấn đề này, tuy nhiên nó khá là đáng sợ.

Như đã đề cập trong bản chỉnh sửa, lỗi này chỉ xảy ra với ImageFrameStyle được đặt thành NSImageFrameNone. Khi tôi đặt ImageFrameStyle đến cái gì khác, sau đó thay đổi kích thước, sau đó đặt nó vào NSImageFrameNone một lần nữa sau khi thay đổi kích thước, mọi thứ hoạt động tốt:

[coverImage setImageFrameStyle: NSImageFramePhoto]; 
coverImage.frame = CGRectMake((1280 - 869)/2, 0, 869 * percentage, 800); 
[coverImage setImageFrameStyle: NSImageFrameNone]; 

này hoạt động nhưng không phải là rất khá. Vì vậy, tôi sẽ để câu hỏi mở cho một vài ngày nữa với hi vọng tìm được câu trả lời tốt hơn.

+0

Hi điều này vẫn hoạt động? Tôi đã thử nhưng có vẻ như nó không hoạt động. – GeneCode

0

Có khả năng là NSImageView đơn giản là không được vẽ lại? Nếu vậy, làm thế nào tôi có thể buộc vẽ lại?

Hãy thử [imageView setNeedsDisplay: YES].

+0

Cảm ơn bạn đã nhập. Đã thêm [coverImage setNeedsDisplay: YES]; sau khi mã đặt khung mới. Thật không may, lỗi vẫn không thay đổi. – 0x90

0

Tôi đã có một số hành vi không mong muốn khi sử dụng chế độ xem được hỗ trợ lớp.Trong các loại chế độ xem này, một lớp lưu trữ nội dung được vẽ, bao gồm hình ảnh, dẫn đến một số hành vi không mong muốn. Xem thuộc tính "wantsLayer" của NSView của bạn được đặt là gì, để biết liệu tính năng sao lưu lớp có được bật hay không.

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