2009-08-05 17 views
15

İşte pikselliyse var? Çerçeve, görüntü boyutundan biraz daha büyük ve ben sadece görüntünün ortalanmasını istiyorum."merkez" arka plan görüntüsü

+1

Maalesef her görüntüler için aynıdır, ancak yanılmıyorsam eğer bir bellek sızıntısı, orada var. Tahsis için tahliye yok. –

+0

@Joseph, bunu işaretlediğiniz için teşekkürler. Kodu güncelledim. –

cevap

25

Arka plan resminin UIButton tarafından "içerik" olarak kabul edilmediğini tahmin ediyorum, bu nedenle içerik modu arka plan görüntüsüne uygulanmadı. Bunun yerine, düğme görüntüsünü ayarlayın ve çok da işime yaramıştı:

[btn setImage:[[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dots_game_horiz_blue" ofType:@"png"]] forState:UIControlStateNormal]; 
[btn setContentMode:UIViewContentModeCenter]; 
+2

Bu çözümdeki sorun, UIButton'un dahili bir kenar boşluğuna sahip olmasıdır, bu nedenle görüntü yeterince küçük değilse, düğmenin içine sığması gerekse bile kırpılır. –

+3

İçerik modunu ayarlamak aslında burada bir şey yapmıyor.Düğme görüntüleri otomatik olarak ortalanır ve ölçeklendirilmez. Ortaya bir şey ayarlamaya çalışın ve ne demek istediğimi görün. –

+2

+1 Ancak, ne yazık ki bir resme sahip bir metin istiyorsanız, bu işe yaramaz :-( – Marc

5

Ayrıca arka plan çizilir nasıl kontrol - (CGRect)backgroundRectForBounds:(CGRect)bounds uygulayabilir.

+3

Bu benim için çalıştı.Ben özel UIButton sınıfı yapmak ve görüntüyü ortalamak için bu kodu kullandım: '- (CGRect) backgroundRectForBounds: (CGRect) sınırları { \t UIImage * bkgImage = [kendini backgroundImageForState: self.state]; \t (bkgImage) { \t \t CGFloat, x = floorf ((self.bounds.size.width-bkgImage.size ise. genişlik)/2) \t \t CGFloat y = floorf ((self.bounds.size.height-bkgImage.size.height)/2); \t \t dönüş CGRectMake (x, y, bkgImage.size.width, bkgImage.size.height); \t Diğerleri [super backgroundRectForBounds: bounds]; } ' –

+0

" Overkill "çözümü imo. Aşağıdaki gibi düğme için çerçeve ayarlayabilirsiniz: UIImage * img = [UIImage imageNamed: @ "dots_game_horiz_blue.png"]; [btn setBackgroundImage: img forState: UIControlStateNormal]; btn.frame = CGRectMake (0, 0, img.size.width, img.size.height); – Tony

0

Avatar fotoğrafları için yuvarlatılmış düğmeler oluşturmam gerekiyordu ve bu sorunun yanıtlarını bulmak için buldular, ancak bana bu şekilde ulaşmadılar. backgroundRectForBounds yöntemini uygulayarak görüntüyü sığacak şekilde ölçekledim ve iyi çalışıyor.

GitHub'da kodum var.

https://github.com/brennanMKE/CircleButton

yöntem

aşağıda listelenmiştir. Bu yöntemle çalışmayan düğmenin görüntüsünü değil arka plan görüntüsünü ayarlamak önemlidir.

- (CGRect)backgroundRectForBounds:(CGRect)bounds { 
    UIImage *backgroundImage = [self backgroundImageForState:self.state]; 
    if (backgroundImage) { 
     CGFloat maxWidth = CGRectGetWidth(self.frame); 

     CGFloat xDelta = maxWidth/backgroundImage.size.width; 
     CGFloat yDelta = maxWidth/backgroundImage.size.height; 
     CGFloat delta = xDelta > yDelta ? xDelta : yDelta; 

     CGFloat x = floorf((self.bounds.size.width - (backgroundImage.size.width * delta))/2); 
     CGFloat y = floorf((self.bounds.size.height - (backgroundImage.size.height * delta))/2); 

     return CGRectMake(x, y, backgroundImage.size.width * delta, backgroundImage.size.height * delta); 
    } 
    else { 
     return [super backgroundRectForBounds:bounds]; 
    } 
} 
1

Doğru çözüm, sistemden Özel olarak değiştirmektir. Ardından, arka plan resmi, yalnızca merkezleme yerine içerik türünü onurlandırır. Benim durumumda bunu Aspect Fill olarak ayarladım ve bunu düzeltmek için 45 derecelik köşe yarıçapı uyguluyorum. Basit ve mükemmel çalışıyor. senin xib/storyboard olarak

+0

Bu işe yaramıyor. Yeni bir özel düğme oluşturdum ve içerik modunu Merkez olarak ayarladım, ancak arka plan resmini yine de görünümün boyutuna sığdırıyor. – devios1

11

, Nitelikler denetçisinde şunları yapmanız gerekir:

  1. Background
  2. 2. adımı Doğrulama değil, mülkiyet Image da resmini ayarlama
  3. Custom için UIButton türünü ayarlayın görüntü çerçevesine göre değiştirilen düğme çerçevesini görebilirsiniz. Eğer bunu istiyorum Çerçeveyi ayarlayın, görüntü
  4. İhtiyacınız gömme değerleri girin düğme görüntüsüne inset uygulamak için mülk Edge için
  5. Select Image sığacak boyutunu ayarlayacaktır. Eğer Top, Bottom, Left, Right için 5 ayarlarsanız, görüntü Sen, bir hata ayıklama başlatmak için gerek xib/film şeridi görünümünde değişiklikleri görebilirsiniz 5

bir kenarlıklı, düğmenin içinde ortalanır.

İpucu: Inset zamanın derinliklerinden o kadar sürüklemek için düğmeye (State Config)

+1

'xib/storyboard'unuz ile başlayan her şey bu soru için bir çözüm değildir: D – Magoo

+0

Şimdiye kadar çözüm evrildi. 4. adımı atlayabilir ve boyut denetçisi (kural simgesi) aracılığıyla 5. adımla devam edebilirsiniz. –

İlgili konular