2011-02-04 42 views
8

Làm cách nào để chia tỷ lệ hình ảnh được sử dụng trong một số UISegmentedControl? Tôi đang tạo điều khiển được phân đoạn theo chương trình:Tỷ lệ hình ảnh UISegmentedControl

UISegmentedControl * segmentButton; 
segmentButton = [UISegmentedControl segmentedControlWithItems: 
       [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"option_one.png"], 
        [UIImage imageNamed:@"option_two.png"], 
        nil]]; 
segmentButton.contentMode = UIViewContentModeScaleToFill; 
segmentButton.frame = CGRectMake(10, 10, 200, 32); 
[view addSubview:segmentButton]; 

Kết quả không phải là những gì tôi mong đợi. Hình ảnh .png gốc cao khoảng 100 pixel và chúng là không phải được thu nhỏ để vừa với chiều cao 32 pixel của điều khiển được phân đoạn. kết quả trong một điều khiển phân đoạn này được rút ra với những hình ảnh khổng lồ chồng chéo nó:

screen shot

Làm thế nào tôi có thể nói điều khiển để mở rộng xuống những hình ảnh?

Trả lời

19

Bạn không bao giờ nên sử dụng hình ảnh "lớn" để chỉ hiển thị một hình ảnh nhỏ. Hình ảnh đầy đủ sẽ được tải trong bộ nhớ, và chỉ 10% số điểm ảnh của nó sẽ được hiển thị, vì vậy bạn sẽ sử dụng rất nhiều bộ nhớ cho không có gì.

Bạn có thể làm gì nếu bạn thực sự muốn sử dụng tài nguyên này là tạo hình thu nhỏ với mã trước và sử dụng hình thu nhỏ mới được tạo này.

Phương pháp sau trả về một hình ảnh mới mà bạn có thể sử dụng trong UISegmentedControl của mình và bạn có thể phát hành hình ảnh lớn.

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

Với mã của bạn:

UISegmentedControl * segmentButton; 
segmentButton = [UISegmentedControl segmentedControlWithItems: [NSArray arrayWithObjects: 
        [self imageWithImage:[UIImage imageNamed:@"option_one.png"] scaledToSize:CGSizeMake(32, 32)], 
        [self imageWithImage:[UIImage imageNamed:@"option_two.png"] scaledToSize:CGSizeMake(32, 32)], 
        nil]]; 
segmentButton.contentMode = UIViewContentModeScaleToFill; 
segmentButton.frame = CGRectMake(10, 10, 200, 32); 
[view addSubview:segmentButton]; 
+1

Đồng ý, nếu những hình ảnh năng động, quy mô cho họ, nếu không cung cấp kích thước khác nhau trong các nguồn ứng dụng của bạn. – petert

+0

Làm cho tinh thần. Cảm ơn bạn! –

+1

segmentButton = [[[UISegmentedControl alloc] initWithItems: images] autorelease]; – neoneye

1

Trong swift3,

extension UIImage { 
    func scaleImage(scaleToSize: CGSize) -> UIImage { 
     UIGraphicsBeginImageContext(scaleToSize) 

     self.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: scaleToSize)) 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 

     UIGraphicsEndImageContext() 
     return newImage! 
    } 
} 
Các vấn đề liên quan