0

カスタム背景画像で UISegmentedControl をカスタマイズしています。コードは次のようになります。

UIImage *segmentSelected = [[UIImage imageNamed:@"segcontrol_sel.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
UIImage *segmentUnselected = [[UIImage imageNamed:@"segcontrol_uns.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
UIImage *segmentSelectedUnselected = [[UIImage imageNamed:@"segcontrol_sel-uns.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
UIImage *segUnselectedSelected = [[UIImage imageNamed:@"segcontrol_uns-sel.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
UIImage *segmentUnselectedUnselected = [[UIImage imageNamed:@"segcontrol_uns-uns.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];

[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected
                                           forState:UIControlStateNormal
                                         barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setBackgroundImage:segmentSelected
                                           forState:UIControlStateSelected
                                         barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected
                             forLeftSegmentState:UIControlStateNormal
                               rightSegmentState:UIControlStateNormal
                                      barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected
                             forLeftSegmentState:UIControlStateSelected
                               rightSegmentState:UIControlStateNormal
                                      barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setDividerImage:segUnselectedSelected
                             forLeftSegmentState:UIControlStateNormal
                               rightSegmentState:UIControlStateSelected
                                      barMetrics:UIBarMetricsDefault];

しかし、結果は本来あるべきものではありません。メソッドの使用法についてはよくわかりません: resizableImageWithCapInsets. 画像が添付されています。

次のようになります。 する必要があります

しかし、実際には次のようになります。 スクリーンショット

間違った UIEdgeInset 値を使用したと思います。背景画像の幅は 22 です。高さ: 30、分割画像の幅: 11; 高さ: 30 何か提案はありますか?

4

2 に答える 2

2

これを試して

HMSSegmentControl

これらの 2 つのファイルとその選択された画像と選択されていない画像のみを使用します

HMSegmentedControl.h

HMSegmentedControl.m

.h ファイル

    #import "HMSegmentedControl.h"
    HMSegmentedControl *segmentedControl;

.m ファイル

viewDidLoad のコード

    segmentedControl = [[HMSegmentedControl alloc] initWithSectionImages:@[[UIImage imageNamed:@"1"], [UIImage imageNamed:@"2"], [UIImage imageNamed:@"3"]] sectionSelectedImages:@[[UIImage imageNamed:@"1-selected"], [UIImage imageNamed:@"2-selected"], [UIImage imageNamed:@"3-selected"]]]; // it create size as per your segment total image
        [segmentedControl setSelectionIndicatorHeight:4.0f];
        [segmentedControl setFrame:CGRectMake(0, 45, 320, 45)];
        [segmentedControl setSegmentEdgeInset:UIEdgeInsetsMake(0, 0, 0, 0)];
        [segmentedControl addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged];
        [segmentedControl setBackgroundColor:[UIColor blueColor]];
        [segmentedControl setSelectionLocation:HMSegmentedControlSelectionLocationDown];
        [segmentedControl setSelectionStyle:HMSegmentedControlSelectionStyleTextWidthStrip];
        [self.view addSubview:segmentedControl];



   - (void)segmentedControlChangedValue:(HMSegmentedControl *)segmentedControl1 {
       if (segmentedControl1.selectedSegmentIndex==0) {
          }
       else if (segmentedControl1.selectedSegmentIndex==1) {
           }
       else if(segmentedControl1.selectedSegmentIndex==2) {
             }
      }
于 2013-04-27T07:18:46.707 に答える
0

より高品質の画像を使用する必要があると思います。

私は間違った UIEdgeInset 値を使用しました。背景画像の幅は 22 です。高さ: 30、分割画像の幅: 11; 高さ: 30 何か提案はありますか?

画像には 60 * 60 ピクセルを試してください。

于 2013-10-11T03:27:17.363 に答える