2013-02-11 20 views
6

, bir frame (0,0,100,30) ile bir UIImageView'ım olduğunu söylüyor.UIView'in alt çerçevesi nasıl gizlenir?

Görüntünün yalnızca bir bölümünü göstermenin en kolay yolu nedir? Örneğin, yalnızca 30-60 (genişlik) ve 0-30 (yükseklik) noktalarında görünenler. Bu, resmin sol ve sağ kenarlarının gizlenmesi gerektiği anlamına gelir.

sadece açıklığa kavuşturmak için, görünümü taşımak veya boyutunu değiştirmek istemiyorum, sadece çerçevesinin bir altını gizlemek istiyorum.

cevap

3

Her zaman bir maske ayarlayabilirsiniz.

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

view.layer.mask = maskLayer; 

Maskeler tabakanın herhangi bir tür olabilir, bu nedenle karmaşık maskeleri bir CAShapeLayer kullanmak ve bazı gerçekten güzel şeyler yapabilirdi. ben bu çözüm bulduk

+0

Mülkiyet fillColor türü 'CALayer *' nesnesi bulunamadı, benim için çalışıyor. Bir ithalatı kaçırıyor muyum? –

+0

, böylece bir CGColor (fillColor değil) için arka plan rengini ayarlama hile yaptı. @Ryan Poolos, cevabınızı düzenleyin ve kabul edeceğim. –

+0

Oh Üzgünüm. 'fillColor', 'CAShapeLayer' üzerinde bir özelliktir ve normalde maskelerim için bir şekil katmanı kullanırım. Alışkanlık yaratığı. : p –

0

Görüntüyü maskelemenin en iyi seçenek olduğuna inanıyorum. Ancak, döndürmek, dönüştürmek, animasyon uygulamak veya net bir arka plan yapmak isterseniz, şu gibi bir şey yapabilirsiniz:

Göstermek istediğiniz görüntünün boyutu olan bir alt görünüm oluşturun. clipsToBounds'un doğru olduğundan emin olun ve görüntüyü buna göre konumlandırın.

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]; 

benim kod üzerinde bakınca, mainView gerekli olduğunu düşünmüyorum ve doğrudan self.view için imageWindow ekleyebilir.

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 
}