Secara kebetulan jika ada yang mendengar dengan pencarian google (seperti yang saya lakukan) dan mencari untuk menambahkan perbatasan ke UIImageView, cari jawabannya oleh @ Mclin di bagian bawah. Bagus sekali!
Mahendra Liya
Jawaban:
241
Dengan OS> 3.0 Anda dapat melakukan ini:
//you need this import#import <QuartzCore/QuartzCore.h>[imageView.layer setBorderColor:[[UIColor blackColor]CGColor]];[imageView.layer setBorderWidth:2.0];
Ketika saya aspekFit gambar dalam gambar di atas, gambar dilihat dengan sempurna tetapi sisi gambar dibiarkan kosong, dan hal yang sama terjadi pada bagian atas dan bawah gambar ketika gambar lanskap. Ruang kosong terlihat jelek dengan batas diatur ke sana .. Apakah Anda menghadapi masalah ini? Jika ya, harap sarankan metode untuk menyelesaikan ini
Temui
@Hamutsi imageView.image = myImage;
Kyle Clegg
6
Ya kamu bisa. Contoh dari UIImagedapat ditarik ke dalam konteks grafik dengan CoreGraphics.
Mark Adams
Seperti yang ditunjukkan @rockstar, Anda mungkin perlu menambahkan imageView.layer.masksToBounds = YA;
Kode ini akan menghasilkan batas berwarna merah muda di sekitar gambar. Namun jika Anda hanya akan menampilkan perbatasan maka gunakan layer UIImageViewdan atur perbatasannya.
Bagaimana Anda menentukan lebar perbatasan yang Anda inginkan?
Patrick
16
CGContextSetLineWidth
Marcus S. Zarra
@ MarcusS.Zarra Saya menyadari bahwa mereka tidak ada ketika pertanyaan ini dijawab, tetapi solusi ini tidak mempertimbangkan tampilan Retina. Jika Anda dapat merevisinya, saya akan sangat berterima kasih :)
Luke
@ lukech Sampel tidak perlu direvisi. Cukup tambahkan lebar garis jika Anda menggunakan perangkat retina.
Marcus S. Zarra
2
Ini sizeadalah 320x480 terlepas dari apakah Anda menggunakan perangkat Retina atau tidak, jadi ketika Anda menyimpan gambar, ia menyimpan resolusi 320x480px itu, bukan 640x960.
Retas yang brilian, terutama dalam hal penggunaan memori - jawaban yang lain akan membutuhkan 2x memori hanya untuk menambahkan batas itu sejenak. Kiat pro - Jika Anda ingin menambahkan batas di satu sisi, maka Anda juga dapat mengubah batas. Jawaban bagus!
judepereira
11
Jika Anda mengetahui dimensi gambar Anda, maka menambahkan perbatasan ke lapisan UIImageView adalah solusi terbaik AFAIK. Infact, Anda dapat mengaturFrame imageView Anda ke x, y, image.size.width, image.size.height
Jika Anda memiliki ImageView ukuran tetap dengan gambar yang dimuat secara dinamis yang diubah ukurannya (atau diskalakan ke AspectFit), maka tujuan Anda adalah mengubah ukuran tampilan gambar ke gambar yang baru diubah ukurannya.
Cara terpendek untuk melakukan ini:
// containerView is my UIImageView
containerView.layer.borderWidth =7;
containerView.layer.borderColor =[UIColor colorWithRed:0.22 green:0.22 blue:0.22 alpha:1.0].CGColor;// this is the key command[containerView setFrame:AVMakeRectWithAspectRatioInsideRect(image.size, containerView.frame)];
Tetapi untuk menggunakan AVMakeRectWithAspectRatioInsideRect, Anda perlu menambahkan ini
#import <AVFoundation/AVFoundation.h>
impor pernyataan ke file Anda dan sertakan juga kerangka kerja AVFoundation dalam proyek Anda (dibundel dengan SDK).
Anda tidak dapat menambahkan perbatasan, tetapi ini akan bekerja untuk efek yang sama. Anda juga bisa membuat UIView yang disebut blackBG dalam contoh ini menjadi UIImageView dengan gambar tepi dan tengah kosong, dan kemudian Anda akan memiliki batas gambar khusus bukan hanya hitam.
Inilah yang akhirnya saya lakukan; bersarang saya UIImageViewdi tengah sedikit lebih besar UIViewdari warna bingkai saya.
Ben Kreeger
6
semua jawaban ini berfungsi dengan baik TETAPI menambahkan sebuah persegi ke gambar. Misalkan Anda memiliki bentuk (dalam kasus saya kupu-kupu) dan Anda ingin menambahkan perbatasan (perbatasan merah):
kita perlu dua langkah: 1) mengambil gambar, mengonversi ke CGImage, beralih ke fungsi untuk menggambar di luar layar dalam konteks menggunakan CoreGraphics, dan memberikan kembali CGImage baru
-(void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.CGRect frame =CGRectMake(0,0,160,122);UIImage* img =[UIImage imageNamed:@"butterfly"];// take low res OR high res, but frame should be the low-res one.
imgV =[[UIImageView alloc]initWithFrame:frame];[imgV setImage: img];
imgV.center = self.view.center;[self.view addSubview: imgV];
frame.size.width = frame.size.width *1.3;
frame.size.height = frame.size.height*1.3;CGImageRef cgImage =[ViewController createResizedCGImage:[img CGImage] toWidth:frame.size.width andHeight: frame.size.height ];
imgV2 =[[UIImageView alloc]initWithFrame:frame];[imgV2 setImage:[UIImage imageWithCGImage:cgImage]];// release:if(cgImage)CGImageRelease(cgImage);[self.view addSubview: imgV2];
}
Saya menambahkan kupu-kupu normal dan kupu-kupu besar berbatasan-merah.
Anda dapat memanipulasi gambar itu sendiri, tetapi cara yang jauh lebih baik adalah dengan hanya menambahkan UIView yang berisi UIImageView, dan mengubah latar belakang menjadi hitam. Kemudian atur ukuran tampilan kontainer menjadi sedikit lebih besar dari UIImageView.
Apakah akan bekerja dengan ukuran gambar berbeda yang berubah dengan cepat? UIImageView akan berubah setiap saat, dan UIView? ps Memanipulasi gambar itu sendiri akan menjadi hebat.
Shay
Anda harus menyesuaikan bingkai tampilan yang berisi gambar - Anda bisa menghemat properti pusat untuk kedua tampilan, menyesuaikan ukuran gambar, menyesuaikan ukuran wadah, dan kemudian mengatur ulang properti pusat untuk keduanya.
Kendall Helmstetter Gelner
Ini persis seperti yang saya lakukan sebagai lawan membelai jalan dengan CG. sepertinya lebih mudah.
Corey Floyd
2
Cara lain adalah dengan melakukan langsung dari desainer.
Pilih gambar Anda dan pilih "Tampilkan inspektur Identitas".
Di sini Anda dapat secara manual menambahkan " Atribut Runtime yang Ditentukan Pengguna" :
Saya telah membuat kelas yang menambahkan perbatasan ke imageView h. Gunakan kelas ini sebagai ganti UIImageView. Saya telah memberikan padding 4. Anda dapat memberikan sesuai keinginan Anda.
Jawaban:
Dengan OS> 3.0 Anda dapat melakukan ini:
sumber
UIImage
dapat ditarik ke dalam konteks grafik dengan CoreGraphics.Anda dapat melakukan ini dengan membuat gambar baru (juga dijawab dalam posting Anda yang lain dari pertanyaan ini):
Kode ini akan menghasilkan batas berwarna merah muda di sekitar gambar. Namun jika Anda hanya akan menampilkan perbatasan maka gunakan layer
UIImageView
dan atur perbatasannya.sumber
CGContextSetLineWidth
size
adalah 320x480 terlepas dari apakah Anda menggunakan perangkat Retina atau tidak, jadi ketika Anda menyimpan gambar, ia menyimpan resolusi 320x480px itu, bukan 640x960.Kode ini dapat digunakan untuk menambahkan
UIImageView
batas tampilan.sumber
sumber
Jika Anda mengetahui dimensi gambar Anda, maka menambahkan perbatasan ke lapisan UIImageView adalah solusi terbaik AFAIK. Infact, Anda dapat mengaturFrame imageView Anda ke x, y, image.size.width, image.size.height
Jika Anda memiliki ImageView ukuran tetap dengan gambar yang dimuat secara dinamis yang diubah ukurannya (atau diskalakan ke AspectFit), maka tujuan Anda adalah mengubah ukuran tampilan gambar ke gambar yang baru diubah ukurannya.
Cara terpendek untuk melakukan ini:
Tetapi untuk menggunakan AVMakeRectWithAspectRatioInsideRect, Anda perlu menambahkan ini
impor pernyataan ke file Anda dan sertakan juga kerangka kerja AVFoundation dalam proyek Anda (dibundel dengan SDK).
sumber
Anda tidak dapat menambahkan perbatasan, tetapi ini akan bekerja untuk efek yang sama. Anda juga bisa membuat UIView yang disebut blackBG dalam contoh ini menjadi UIImageView dengan gambar tepi dan tengah kosong, dan kemudian Anda akan memiliki batas gambar khusus bukan hanya hitam.
sumber
UIImageView
di tengah sedikit lebih besarUIView
dari warna bingkai saya.semua jawaban ini berfungsi dengan baik TETAPI menambahkan sebuah persegi ke gambar. Misalkan Anda memiliki bentuk (dalam kasus saya kupu-kupu) dan Anda ingin menambahkan perbatasan (perbatasan merah):
kita perlu dua langkah: 1) mengambil gambar, mengonversi ke CGImage, beralih ke fungsi untuk menggambar di luar layar dalam konteks menggunakan CoreGraphics, dan memberikan kembali CGImage baru
2) konversi ke uiimage kembali dan menggambar:
}
}
Saya menambahkan kupu-kupu normal dan kupu-kupu besar berbatasan-merah.
sumber
Anda dapat menambahkan perbatasan ke UIImageView, dan kemudian mengubah ukuran UIimageView sesuai dengan ukuran gambar:
Pastikan Anda mengatur asal imageView ke tengah
sumber
Anda dapat memanipulasi gambar itu sendiri, tetapi cara yang jauh lebih baik adalah dengan hanya menambahkan UIView yang berisi UIImageView, dan mengubah latar belakang menjadi hitam. Kemudian atur ukuran tampilan kontainer menjadi sedikit lebih besar dari UIImageView.
sumber
Cara lain adalah dengan melakukan langsung dari desainer.
Pilih gambar Anda dan pilih "Tampilkan inspektur Identitas".
Di sini Anda dapat secara manual menambahkan " Atribut Runtime yang Ditentukan Pengguna" :
sumber
// Anda perlu mengimpor
& lalu untuk ImageView di perbatasan
sumber
Fungsi ini akan mengembalikan gambar Anda dengan batas hitam coba ini .. harap ini akan membantu Anda
sumber
Di Swift 3 inilah cara Anda melakukannya ke UIImage itu sendiri:
sumber
Bagi mereka yang mencari solusi plug-and-play di UIImage, saya menulis jawaban CodyMace sebagai ekstensi.
Pemakaian:
let outlined = UIImage(named: "something")?.outline()
sumber
Saya telah membuat kelas yang menambahkan perbatasan ke imageView h. Gunakan kelas ini sebagai ganti UIImageView. Saya telah memberikan padding 4. Anda dapat memberikan sesuai keinginan Anda.
sumber
Saya menggunakan metode ini untuk menambahkan perbatasan di luar gambar . Anda dapat menyesuaikan lebar perbatasan dalam
boderWidth
konstan.Cepat 3
sumber