İş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ü
cevap
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];
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. –
İç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. –
+1 Ancak, ne yazık ki bir resme sahip bir metin istiyorsanız, bu işe yaramaz :-( – Marc
Ayrıca arka plan çizilir nasıl kontrol - (CGRect)backgroundRectForBounds:(CGRect)bounds
uygulayabilir.
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]; } ' –
" 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
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];
}
}
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
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
, Nitelikler denetçisinde şunları yapmanız gerekir:
Background
- 2. adımı Doğrulama değil, mülkiyet
Image
da resmini ayarlama - İhtiyacınız gömme değerleri girin düğme görüntüsüne inset uygulamak için mülk
Edge
için - Select
Image
sığacak boyutunu ayarlayacaktır. EğerTop, 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
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ü
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
)
'xib/storyboard'unuz ile başlayan her şey bu soru için bir çözüm değildir: D – Magoo
Şimdiye kadar çözüm evrildi. 4. adımı atlayabilir ve boyut denetçisi (kural simgesi) aracılığıyla 5. adımla devam edebilirsiniz. –
- 1. jCanvas - arka plan görüntüsü
- 2. Fit arka plan görüntüsü
- 3. CSS arka plan görüntüsü gitmeyecek
- 4. UISearchBar berrak arka plan görüntüsü
- 5. Tasarım UITableView arka plan görüntüsü
- 6. CSS saydam arka plan görüntüsü
- 7. Tablo satır arka plan görüntüsü
- 8. Arka plan görüntüsü geçişinde css geçişi
- 9. değişim arka plan görüntüsü: Ben bir menü
- 10. Sabit arka plan görüntüsü kaydırma hemen
- 11. anahtarı arka plan görüntüsü iphone5 - In
- 12. Flask Şablonlarında arka plan görüntüsü nasıl ayarlanır?
- 13. Arayüz Oluşturucuda Arka Plan Görüntüsü Ekleme
- 14. css arka plan görüntüsü konumlandırma (negatif konum?)
- 15. CSS sınıfı arka plan görüntüsü yatay konumlandırma?
- 16. tam genişlikli arka plan görüntüsü sınırlı yükseklik
- 17. Arka Plan Görüntüsü Değer Koşul RDLC NAV
- 18. Form Giriş ile arka plan görüntüsü
- 19. Div Arka Plan Görüntüsü Yazdır Boş
- 20. Arka plan resimli UIViewController
- 21. Arka plan görüntüsü ile yeni iPhone ekran boyutlarını kullanma
- 22. Bir satırın satır içi arka plan görüntüsü olarak SVG çalışmıyor
- 23. Arka plan görüntüsü tekrarları arasında boşluk yaratabiliyor musunuz?
- 24. VirtualTreeView'de arka plan görüntüsü olan hücreleri nasıl karıştırılır?
- 25. İki arka plan görüntüsü arasında kaybolmak mümkün mü?
- 26. gedit ile arka plan görüntüsü için harici css nasıl kullanılır
- 27. android tıklanabilir - düğme arka plan görüntüsü etrafında şekil bırakır
- 28. Arka plan görüntüsü üzerinde şeffaf bir css3 gradyanını kaplayabilir misiniz?
- 29. Android Paint ile arka plan görüntüsü renk tespiti
- 30. jQuery olmadan gezinirken div arka plan görüntüsü nasıl değiştirilir?
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. –
@Joseph, bunu işaretlediğiniz için teşekkürler. Kodu güncelledim. –