আমার Assets.xcassets এ একটি বিশাল চিত্র রয়েছে। কীভাবে এই চিত্রটিকে ছোট করে তুলতে সুইফটুআইয়ের সাথে এটি পুনরায় আকার দেবেন?
আমি ফ্রেম সেট করার চেষ্টা করেছি কিন্তু এটি কার্যকর হয় না:
Image(room.thumbnailImage)
.frame(width: 32.0, height: 32.0)
উত্তর:
আপনার .resizable()
কোনও আকারের পরিবর্তনগুলি প্রয়োগ করার আগে ব্যবহার করা উচিত Image
।
Image(room.thumbnailImage).resizable()
.frame(width: 32.0, height: 32.0)
aspectRatio(_:contentMode:)
Image("name").resizable().scaledToFit()
বগড না, যদিও। সুতরাং আপনি নিজের ইমেজটিকে একটি দৃশ্যে মুড়িয়ে রাখতে পারেন, ভিউটির ফ্রেমটি আপনার যা আকারের প্রয়োজন তা সামঞ্জস্য করতে পারেন, তারপরে scaledToFit()
চিত্রটি অনুপাতের অনুপাত বজায় রাখার সময় যতটা আকারের হতে পারে তত বড় করে তুলবে।
এটি সম্পর্কে:
struct ResizedImage: View {
var body: some View {
Image("myImage")
.resizable()
.scaledToFit()
.frame(width: 200.0,height:200)
}
}
চিত্রের ভিউ 200x200, তবে চিত্রটি মূল দিক অনুপাত বজায় রেখেছে (সেই ফ্রেমের মধ্যে পুনরুদ্ধার করছে)
Image(uiImage: image!).resizable().aspectRatio(image!.size, contentMode: .fill)
যেখানে image
প্রকারের UIImage
কারণ Image
কোনও আকারের সম্পত্তি প্রকাশ করে না।
@ রাফেলের উত্তর এবং মন্তব্যগুলিতে প্রসারিত:
এক্সকোড 11 বিটা 2 হিসাবে, আপনি কোনও উপাদানটিকে অন্য উপাদানগুলিতে মোড়ানো দ্বারা আসল দিক অনুপাত বজায় রেখে স্বেচ্ছাসেবী আকারগুলিতে একটি চিত্র স্কেল করতে পারেন।
যেমন
struct FittedImage: View
{
let imageName: String
let width: CGFloat
let height: CGFloat
var body: some View {
VStack {
Image(systemName: imageName)
.resizable()
.aspectRatio(1, contentMode: .fit)
}
.frame(width: width, height: height)
}
}
struct FittedImagesView: View
{
private let _name = "checkmark"
var body: some View {
VStack {
FittedImage(imageName: _name, width: 50, height: 50)
.background(Color.yellow)
FittedImage(imageName: _name, width: 100, height: 50)
.background(Color.yellow)
FittedImage(imageName: _name, width: 50, height: 100)
.background(Color.yellow)
FittedImage(imageName: _name, width: 100, height: 100)
.background(Color.yellow)
}
}
}
ফলাফল
(কোনও কারণে চিত্রটি কিছুটা অস্পষ্ট হিসাবে দেখানো হচ্ছে Rest আশ্বাস দিন যে আসল আউটপুটটি তীক্ষ্ণ।
.aspectRatio(1, ...
। এটি বলার অপেক্ষা রাখে না যে এখানে অন্য কোনও সমাধান আমার পক্ষে এখনও কাজ করেছে ...
SwiftUI এ .resizable()
কোনও চিত্রের আকার পরিবর্তন করতে পদ্ধতিটি ব্যবহার করুন । এটিকে .aspectRatio()
নির্দিষ্ট করে নির্দিষ্ট করে ContentMode
আপনি যথাযথভাবে "ফিট" বা "ফিল" করতে পারেন।
উদাহরণস্বরূপ, এখানে এমন কোড যা ফিটিংয়ের মাধ্যমে চিত্রটির আকার পরিবর্তন করে:
Image("example-image")
.resizable()
.aspectRatio(contentMode: .fit)
দ্রষ্টব্য: আমার চিত্রের নামটি
img_Logo
এবং আপনি চিত্রের নামটি চিত্রের বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে এটি পরিবর্তন করতে পারেন:
VStack(alignment: .leading, spacing: 1) {
//Image Logo Start
Image("img_Logo")
.resizable()
.padding(.all, 10.0)
.frame(width: UIScreen.main.bounds.width * 0.4, height: UIScreen.main.bounds.height * 0.2)
//Image Logo Done
}
আপনি যদি পুনরায় আকারের সাথে দিক অনুপাত ব্যবহার করতে চান তবে নীচের কোডটি ব্যবহার করতে পারেন:
Image(landmark.imageName).resizable()
.frame(width: 56.0, height: 56.0)
.aspectRatio(CGSize(width:50, height: 50), contentMode: .fit)
যেহেতু আমাদের হার্ডকোড / চিত্রের আকার ঠিক করা উচিত নয়। বিভিন্ন ডিভাইসে স্ক্রিনের রেজোলিউশন অনুযায়ী সামঞ্জস্য করার জন্য এখানে পরিসর সরবরাহ করার একটি আরও ভাল উপায়।
Image("ImageName Here")
.resizable()
.frame(minWidth: 60.0, idealWidth: 75.0, maxWidth: 95.0, minHeight: 80.0, idealHeight: 95.0, maxHeight: 110.0, alignment: .center)
.scaledToFit()
.clipShape(Capsule())
.shadow(color: Color.black.opacity(5.0), radius: 5, x: 5, y: 5)
আর একটি পদ্ধতির পরিবর্তনকারীটি ব্যবহার করা scaleEffect
:
Image(room.thumbnailImage)
.resizable()
.scaleEffect(0.5)
আপনি যদি swiftUI এ চিত্রটির আকার পরিবর্তন করতে চান তবে কেবল নীচের কোডটি ব্যবহার করুন:
import SwiftUI
struct ImageViewer : View{
var body : some View {
Image("Ssss")
.resizable()
.frame(width:50,height:50)
}
}
তবে এখানে এটি নিয়ে সমস্যা। আপনি যদি এই ছবিটি কোনও বোতামের মধ্যে যুক্ত করেন তবে চিত্রটি প্রদর্শিত হবে না, কেবল নীল রঙের একটি ব্লক থাকবে। এই সমস্যাটি সমাধান করার জন্য, কেবল এটি করুন:
import SwiftUI
struct ImageViewer : View{
var body : some View {
Button(action:{}){
Image("Ssss")
.renderingMode(.original)
.resizable()
.frame(width:50,height:50)
}
}
}
ওয়েল, এটি সুইফটিউআইতে / তারা প্রদত্ত ডেমো অনুসরণ করে বেশ সহজ বলে মনে হচ্ছে : https://developer.apple.com/videos/play/wwdc2019/204
struct RoomDetail: View {
let room: Room
var body: some View {
Image(room.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
}
আশা করি এটা সাহায্য করবে.
আপনি চিত্রের বৈশিষ্ট্যগুলি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করতে পারেন: -
Image("\(Image Name)")
.resizable() // Let you resize the images
.frame(width: 20, height: 20) // define frame size as required
.background(RoundedRectangle(cornerRadius: 12) // Set round corners
.foregroundColor(Color("darkGreen")) // define foreground colour
কোডের যৌক্তিক কাঠামো বোঝা খুব গুরুত্বপূর্ণ। SwiftUI এর মতো একটি চিত্রও ডিফল্টরূপে পুনরায় আকার পরিবর্তন করতে পারে না। সুতরাং, যে কোনও চিত্রকে পুনরায় আকার দিতে আপনার কোনও চিত্রের দৃশ্যের ঘোষণার পরপরই .resizable () পরিবর্তনকারী প্রয়োগ করে এটিকে পুনরায় আকার পরিবর্তন করতে হবে।
Image("An Image file name")
.resizable()
ডিফল্টরূপে চিত্রের দর্শনগুলি তাদের বিষয়বস্তুগুলিতে স্বয়ংক্রিয়ভাবে আকার দেয়, যা তাদের পর্দার বাইরে যেতে পারে। আপনি যদি পুনরায় আকার পরিবর্তনযোগ্য () সংশোধক যোগ করেন তবে চিত্রটি এর পরিবর্তে স্বয়ংক্রিয় আকারযুক্ত হবে যাতে এটি সমস্ত উপলব্ধ স্থান পূরণ করে:
Image("example-image")
.resizable()
যাইহোক, এটি চিত্রটির মূল দিক অনুপাতটিকে বিকৃত করতেও কারণ হতে পারে কারণ এটি স্থান পূরণ করতে যে পরিমাণ পরিমাণ প্রয়োজন তা দিয়ে এটি সমস্ত মাত্রায় প্রসারিত হবে।
আপনি যদি তার দিক অনুপাত রাখতে চান তবে আপনার .Pill বা। ফিট ব্যবহার করে একটি অনুপাত রেশি সংশোধক যুক্ত করা উচিত:
Image("example-image")
.resizable()
.aspectRatio(contentMode: .fit)