2013-10-16 32 views
0

我需要爲UISlider的最小值和最大值圖像添加觸摸響應。滑塊是一個縮放條,因此圖像是負號和正號,如果被觸摸,它們應該相應地放大或縮小。 UISlider屬性minimumValueImagemaximumValueImage的類型是UIImage,而不是UIImageView,所以我無法直接向它添加手勢識別器。將手勢識別器添加到UISlider最小值/最大值圖像

任何想法?是唯一的選擇,讓圖像頂部的哈克和清晰的按鈕?如果是這樣的話,我怎樣才能得到最小/最大的圖像幀?

回答

0

你正在尋找的圖像視圖是@package裏面UISlider類,而不是從外部

UIImageView *_minValueImageView;
UIImageView *_maxValueImageView;

你仍然可以用客觀的C運行時讓他們訪問。

#import <objc/runtime.h>

// Initialize slider and images 
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(100, 100, 300, 40)]; 
[slider setMinimumValueImage:[UIImage imageNamed:@"img1"]]; 
[slider setMaximumValueImage:[UIImage imageNamed:@"img2"]]; 

Ivar minimumValueImageViewIvar = class_getInstanceVariable([slider class], "_minValueImageView"); 
UIImageView *minimumValueImageView = (UIImageView*)(object_getIvar(slider, minimumValueImageViewIvar)); 
// [minimumValueImageView setHidden:YES]; 

Ivar maximumValueImageViewIvar = class_getInstanceVariable([slider class], "_maxValueImageView"); 
UIImageView *maximumValueImageView = (UIImageView*)(object_getIvar(slider, maximumValueImageViewIvar)); 
// [maximumValueImageView setHidden:YES]; 
0

你可以看看滑塊的子視圖。應該有2個UIImageView。然後,您可以設置userInteractionEnabled = YES併爲其中的每個添加一個UITapGestureRecognizer。

NSMutableArray* images = [NSMutableArray array]; 
for (id sv in slider.subviews) { 
    if ([sv isKindOfClass:[UIImageView class]]) { 
     [image addObject:sv]; 
    } 
} 
if (images.count == 2) { 
    UITapGestureRecognizer* gr = [[UITapGestureRecognizer alloc] initWithTarget:self 
                     action:@selector(minImageTapped:)]; 
    [imageViews[0] addGestureRecognizer:gr]; 
    [imageViews[0] setUserInteractionEnabled:YES]; 

    gr = [[UITapGestureRecognizer alloc] initWithTarget:self 
               action:@selector(maxImageTapped:)]; 
    [imageViews[1] addGestureRecognizer:gr]; 
    [imageViews[1] setUserInteractionEnabled:YES]; 
}