2016-04-28 12 views
1

カスタムUIControlを作成していますが、コントロールの一部に画像が含まれていますようお願いいたします。現在、制御がサーバから画像をダウンロードすることができ、そして私は現在、効果なしにのdrawRectでこれをやっている:カスタムUIControl内のサブビューとしてImageViewを追加します。

NSURL *url = [NSURL URLWithString:self.imageData]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
UIImage *image = [UIImage imageWithData:data]; 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds]; 
imageView.image = image; 

私は私のコントロールがサブビューとしてImageViewのを追加されていないためであると考えているが、これはUIViewではなくUIControlなので、どうやってやるのか分かりません。

クラスには、次のようになります。

@interface RDWebButton : UIControl 

/** The color of the button*/ 
@property (nonatomic) IBInspectable UIColor *buttonColor; 

#if TARGET_INTERFACE_BUILDER 
@property (nonatomic) IBInspectable NSInteger buttonShape; 
#else 
@property (nonatomic) RDShape buttonShape; 
#endif 

@end 

- (void)drawRect:(CGRect)rect { 
    // do drawing 
    NSLog(@"drawRect..."); 
    self.backgroundColor = [UIColor clearColor]; 

    [self.buttonColor setFill]; 
    switch (self.buttonShape) { 
     case RDShapeSquare: { 
      UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect]; 
      [path fill]; 
      break; 
     } 
     case RDShapeRoundedRect: { 
      UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:10]; 
      [path fill]; 
      break; 
     } 
     case RDShapeCircle: { 
      UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect]; 
      [path fill]; 
      break; 
     } 
    } 
    NSURL *url = [NSURL URLWithString:self.imageData]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    UIImage *image = [UIImage imageWithData:data]; 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds]; 
    imageView.image = image; 
} 

私が今欲しいのが描かれている形状の上に表示されるように私の画像を取得することです。私はスーパークラスをUIButtonの代わりにUIControlに設定しました。これは、ユーザが項目をドラッグしてメニューや何かを表示できるようにするためですが、UIControlはUIButtonが行うことができるすべてを行うことができるはずです。私の挑戦は、描かれた図形の上にイメージをロードすることです。

+0

サブクラスとは何ですか? UIButton?クラス全体を見せてくれますか? – Echizzle

+0

に明確なコードを追加しました – RDSpinz

答えて

0

解決方法は、スーパービューのサブビュー内で制御する必要があることです。私が使用したコードは次のとおりでした:

NSURL *url = [NSURL URLWithString:self.imageData]; 
     NSData *data = [NSData dataWithContentsOfURL:url]; 
     UIImage *image = [UIImage imageWithData:data]; 
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.bounds.size.width * 0.25, self.bounds.size.height * 0.25, self.bounds.size.width * 0.5, self.bounds.size.height * 0.5)]; 
     imageView.image = image; 
     [self.superview.subviews.firstObject addSubview:imageView]; 
     for (UIView *view in self.superview.subviews) { 
      if (view == self) { 
       [view addSubview:imageView]; 
      } 
     } 

これは私のUIControlの中心にイメージビューを置きます。

関連する問題