2013-02-11 9 views
6

私はUIImageViewフレーム(0,0,100,30) .that imageViewに画像が割り当てられていると言うことができます。UIViewのサブフレームを非表示にする方法は?

画像の一部のみを表示する最も簡単な方法は何ですか?

たとえば、ポイント30-60(幅)と0-30(高さ)に表示されるもののみ。つまり、画像の左右の端を隠す必要があります。

私はビューを移動したり、サイズを変更する必要はありません、私はちょうどそのフレームのsubrectを隠したいと思います。

答えて

3

いつでもマスクを設定できます。あなたも、複雑なマスクのCAShapeLayerを使用して、いくつかの本当にクールなものを行うことができるように

CALayer *maskLayer = [CALayer layer]; 
maskLayer.backgroundColor = [UIColor blackColor].CGColor; 
maskLayer.frame = CGRectmake(30.0, 0.0, 30.0, 30.0); 

view.layer.mask = maskLayer; 

マスクは、層のいずれかのタイプにすることができます。

+0

プロパティfillcolorの型 'のCALayer *' のオブジェクトでは見られない、私の作品、私を見つけました。私は輸入品を逃していますか? –

+0

だから、背景色をCGColor(fillColorではない)に設定するのはやりました。 @ライアン・プールス、あなたの答えを編集し、私はそれを受け入れるでしょう。 –

+0

ああ申し訳ありません。 'fillColor'は' CAShapeLayer'のプロパティで、私は通常マスクのシェイプレイヤーを使います。習慣の生き物。 :p –

0

私は画像をマスクするのが最良の選択だと考えています。しかし、回転、変形、アニメーション化、または透明な背景が必要な場合は、次のようなことができます。

表示する画像のサイズであるサブビューを作成します。それが本当にclipsToBoundsを持っていることを確認し、それに応じて画像を配置してください。

UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; 

//this is the part of the image you wish to see 
UIView *imageWindow = [[UIView alloc] initWithFrame:CGRectMake(30, 0, 30, 30)]; 
imageWindow.clipsToBounds = YES; 

//your image view is the height and width of mainView and x and y is imageWindow - mainView. You can do this manually or put in calculations. 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(imageWindow.frame.origin.x - mainView.frame.origin.x, imageWindow.frame.origin.y - mainView.frame.origin.y, mainView.frame.size.width, mainView.frame.size.height)]; 
myImage.image = [UIImage imageNamed:@"1024x1024.png"]; 

[imageWindow addSubview:myImage]; 
[mainView addSubview:imageWindow]; 
[self.view addSubview:mainView]; 

私のコードを見ている、私はmainViewが必要だとは思わない、あなたは直接self.viewするimageWindowを追加することができます。

0

このソリューションはhttps://stackoverflow.com/a/39917334/3192115

func mask(withRect rect: CGRect, inverse: Bool = false) { 
    let path = UIBezierPath(rect: rect) 
    let maskLayer = CAShapeLayer() 

    if inverse { 
     path.append(UIBezierPath(rect: self.view.bounds)) 
     maskLayer.fillRule = kCAFillRuleEvenOdd 
    } 

    maskLayer.path = path.cgPath 
    imageView?.layer.mask = maskLayer 
} 
関連する問題