2010-01-03 8 views
8

Tôi đang cố gắng tạo nút tùy chỉnh bằng cách sử dụng hình nền trong Trình tạo giao diện. Hình ảnh có các bộ phận có thể kéo giãn và không thể kéo giãn để có thể thay đổi kích cỡ.Trình tạo giao diện (iPhone dev) nền nút tùy chỉnh Hình ảnh không tôn trọng Cài đặt kéo dài

IB phơi bày các thuộc tính Kéo dài để cho phép điều này, nhưng không có giá trị nào tôi đưa vào ảnh hưởng đến cách nút xuất hiện. Nó luôn luôn được kéo dài hoàn toàn để lấp đầy kích thước của khung.

Đây có phải là tính năng không được hỗ trợ này trong IB hoặc trong UIButton không?

http://img.skitch.com/20100103-rjabkq2c2jkqynw47crxepdtwb.jpg

(Lưu ý: Các giá trị rạn da ở trên không phải là những người sẽ làm việc với hình ảnh đúng, nhưng chỉ là giá trị tôi đã rối tung với tại thời điểm chụp màn hình)

+0

Cùng một vấn đề với cùng một tệp mẫu từ UICatalog. Bất kỳ tiến bộ nào? Bạn có phải thiết lập nó trong mã? – JOM

Trả lời

2

Trong ví dụ này trong Bắt đầu phát triển iPhone 3 chỉ UIImage leftCapWidthtopCapHeight được sử dụng và hình ảnh được tạo/đặt theo chương trình, vì vậy đó là phương pháp thay thế nếu contentStretch không hoạt động.

+0

Dường như điều này không hoạt động như nó có vẻ như nó sẽ. Các tài liệu nói về những giá trị này làm chính xác những gì tôi muốn (toàn bộ hình ảnh nút kéo dài). Có để lập trình làm cho các nút nhìn chính xác là loại lẻ cho chúng tôi có một GUI toàn bộ làm GUI ... aka IB. –

+0

Nhìn vào tài liệu cho contentStretch, mặc định rằng chương trình IB (cụ thể là 0,50) không phải là giá trị mặc định thực tế của h/w 0,0 và kích thước 1,1 vì vậy tôi đoán nó không quá ngạc nhiên khi cài đặt trong IB don 't làm việc. Có vẻ như contentStretch đã được thêm vào 3.0 nên có thể có gì đó liên quan đến nó. http://bugreport.apple.com/ – Nimrod

+1

Tôi không theo dõi. Tôi không sử dụng các giá trị mặc định. Như tôi đã nói, không có giá trị nào tôi đưa vào có bất kỳ tác động nào. Những cái được hiển thị trong ảnh chụp màn hình không phải là giá trị mặc định. Tôi đã chạy dưới 3.0. –

0

Trong trường hợp bạn muốn nhiều hơn một pixel để kéo dài (ví dụ: mẫu ở giữa nút) UIImage có thể kéo giãn không hoạt động.

Nội dung của UIButtonStretch cũng không hoạt động bình thường.

Cách tôi giải quyết nó: Tôi đã phân loại UIButton và thêm UIImageView *backgroundImageView làm thuộc tính và đặt nó ở chỉ số 0 làm tiểu sử trong UIButton. Sau đó tôi đảm bảo trong layoutSubviews rằng nó phù hợp với nút hoàn toàn và thiết lập các trạng thái được đánh dấu của imageView. Tất cả những gì bạn cần làm là chuyển giao một UIImageView với contentStretch và contentMode chính xác được áp dụng.

.h tập tin

@interface ButtonWithBackgroundImage : UIButton { 
    UIImageView *backgroundImageView; 
} 
@property (retain) UIImageView *backgroundImageView; 
+ (ButtonWithBackgroundImage*)button; 
@end 

tập tin .m

@implementation ButtonWithBackgroundImage 
@synthesize backgroundImageView; 

+ (ButtonWithBackgroundImage*)button { 
return [self buttonWithType:UIButtonTypeCustom]; 
} 
- (void)setBackgroundImageView:(UIImageView*)img { 
    [backgroundImageView removeFromSuperview]; 
    [backgroundImageView release]; 

    backgroundImageView = [img retain]; 

    if(backgroundImageView){ 
     [self insertSubview:backgroundImageView atIndex:0]; 
     [self setNeedsLayout]; 
    } 
} 

- (void)setSelected:(BOOL)select { 
    [super setSelected:select]; 
    // we subclass the setSelect method to highlight the background imageview 
[backgroundImageView setHighlighted:select||self.highlighted]; 
} 
- (void)setHighlighted:(BOOL)highl { 
    [super setHighlighted:highl]; 

    // we subclass the setHighlighted method to highlight the background imageview  
    [backgroundImageView setHighlighted:highl||self.selected]; 
} 

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    self.backgroundImageView.frame = self.bounds; 
} 

- (void)dealloc { 
    [backgroundImageView release]; 
    backgroundImageView = nil; 
    [super dealloc]; 
} 
@end 
+0

nó hỗ trợ hình ảnh lát gạch ngay bây giờ .. – hfossli

-1

tôi đã nhận nó làm việc !!! Giá trị phép thuật của tôi là 0,2 và 0,2.

Hình ảnh của tôi là một hộp trong một hộp, cả hai đều có các góc tròn.

Khi nó là 0,2 và 0,8, nó rời khỏi đỉnh của hình ảnh không được mở rộng, nhưng đáy được kéo dài và bị méo.

Tôi đoán, 0,2 đầu tiên là độ lệch nghĩa là không kéo dài bao nhiêu và thứ 2 có thể là độ dài. Ít nhất, 0,2 và 0,6 làm việc quá.

Về nguyên tắc, bạn có thể thực hiện thử nghiệm: chụp ảnh mạng tinh thể hoặc vòng tròn đồng tâm hoặc tô màu và kéo giãn nó. Nếu bạn làm, xin vui lòng gửi hình ảnh :).

0

Hình nền của nút sẽ luôn được thay đổi kích thước để lấp đầy khung; hình ảnh nền trước sẽ không được thay đổi kích cỡ (nếu không có văn bản, nó sẽ được căn giữa). Logic của kéo dài là nó thay đổi kích thước giữa trong khi rời khỏi biên giới còn nguyên vẹn; ví dụ, đối với hình chữ nhật tròn, điều này có nghĩa là các góc tròn sẽ không bị méo.

0

Sử dụng tính năng Cắt lát Xcode để chỉ định kích thước của khu vực trung tâm có thể thay đổi kích thước của hình ảnh và tùy chọn chỉ định mũ kết thúc, là khu vực của hình ảnh không được lấp đầy bởi khu vực có thể thay đổi kích thước. Xem About Asset Catalogs