ইউআইআইমেজভিউ দিকটি ফিট এবং সেন্টার


181

আমার কাছে একটি চিত্রের ভিউ রয়েছে, যা প্রোগ্রামিয়ালি ঘোষিত হয়েছে এবং আমি এটির চিত্রও প্রোগ্রামিয়ালি সেট করছি।

যাইহোক, আমি নিজেকে উভয় দিকের সাথে মানিয়ে নিতে এবং চিত্রের দৃশ্যে কেন্দ্র বিন্যস্ত করতে অক্ষম মনে করি।

অন্য কথায়, আমি চিত্রটি এটি করতে চাই:

  • দিকটি ফিট করার জন্য স্কেল ডাউন করুন, যদি চিত্রটি বড় হয়।
  • কেন্দ্র তবে স্কেল আপ নয়, যদি চিত্রটি ছোট হয়।

আমি কীভাবে এটি পেতে পারি?


19
[আপনার আইজ্যামভিউ সেটকন্টেন্টমোড: ইউআইভিউ কনটেন্টমোড সেন্টার]; এবং নিশ্চিত করুন যে ইমেজভিউ ফ্রেমটি চিত্রের ফ্রেমের চেয়ে বেশি। যদি এটি না থাকে তবে [আপনার আইজ্যামভিউ সেটকন্টেন্টমোড: ইউআইভিউকন্টেন্টমোডএস্পেক্টটিওফিট] রাখুন;
মনোহর পেরেপা

1
অন্যথায় যদি শর্ত থাকে বন্ধু @ রায়ানপুলোস
মনোহর পেরেপা

উত্তর:


205

সলিউশনটি কেবল আটকে দিন:

ঠিক যেমন @ মানোহর ড

imageView.contentMode = UIViewContentModeCenter;
if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) {
       imageView.contentMode = UIViewContentModeScaleAspectFit;
}

আমার সমস্যা সমাধান


7
চিত্রটি খুঁজে পাওয়ার জন্য ছোট উপায়:CGRectContainsRect(imageView.bounds, {CGPointZero, image.size})
সিএফআর

@ সিএফআর সম্ভবত এটি খাটো, তবে এতটা পাঠযোগ্য নয়। : একই সময়ে আমি ভালো যদি-বিবৃতি দিয়ে লাইন বিভক্ত করার প্রস্তাব করছি CGSize imageSize = ((UIImage*)imagesArray[i]).size;, CGSize viewSize = imageView.bounds.size, if (viewSize.width > imageSize.width && viewSize.height > imageSize.height) {
তৈমুর বার্নিকোভিচ


ইমেজভিউ.কন্টেন্টমোড = ইউআইভিউউকন্টেন্টমোডস্কেলএস্পেক্টফিট;
আরজয় ওয়ারান

74

দ্রুততম ভাষায় আমরা ইউআইআইমেজ ভিউয়ের সামগ্রী মোডকে নীচের মত সেট করতে পারি:

let newImgThumb = UIImageView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
newImgThumb.contentMode = .scaleAspectFit

2
ওপি যা চেয়েছিল তার বিপরীতে এটি চিত্রের চেয়ে ছোট হলে এটি চিত্রটিকে ফুটিয়ে তোলে।
ফিশিনিয়ার

16

দ্রুতগতি

yourImageView.contentMode = .center

আপনি আপনার চিত্র অবস্থান করতে নিম্নলিখিত বিকল্পগুলি ব্যবহার করতে পারেন:

  • scaleToFill
  • scaleAspectFit // বিষয়বস্তু স্থির দিকের সাথে মানিয়ে যায়। বাকীটি স্বচ্ছ
  • redraw // সীমা পরিবর্তন পুনর্নির্মাণ (কলসেটসনেডডিসপ্লে)
  • center// সামগ্রীতে একই আকার থাকে। পজিশন সমন্বিত।
  • top
  • bottom
  • left
  • right
  • topLeft
  • topRight
  • bottomLeft
  • bottomRight

12

আপডেট উত্তর

আমি যখন 2014 সালে মূলত এই প্রশ্নের উত্তর দিয়েছিলাম তখন কোনও ছোট চিত্রের ক্ষেত্রে চিত্রটি বাড়িয়ে তোলার দরকার ছিল না। (প্রশ্নটি 2015 সালে সম্পাদিত হয়েছিল ।) আপনার যদি এইরকম কোনও প্রয়োজন থাকে তবে আপনাকে অবশ্যই চিত্রের আকারের সাথে চিত্রের আকারের তুলনা করতে হবে এবং হয় UIViewContentModeCenter(ইমেজভিউয়ের চেয়ে ছোট কোনও চিত্রের ক্ষেত্রে) বা UIViewContentModeScaleAspectFitঅন্য কোনও ক্ষেত্রে ব্যবহার করতে হবে ।

আসল উত্তর

ইমেজভিউয়ের সামগ্রী মোড সেট করা UIViewContentModeScaleAspectFitআমার পক্ষে যথেষ্ট ছিল। এটি ইমেজগুলিও কেন্দ্র করে বলে মনে হচ্ছে। আমি নিশ্চিত নই যে অন্যরা কেন চিত্রটির উপর ভিত্তি করে যুক্তি ব্যবহার করছে। এই প্রশ্নটিও দেখুন: আইওএস দিকটি ফিট এবং সেন্টার


1
ওপি যা চেয়েছিল তার বিপরীতে এটি চিত্রের চেয়ে ছোট হলে এটি চিত্রটিকে ফুটিয়ে তোলে।
ফিশিনিয়ার

1
: চিত্র স্কেলিং আপ না এক বছর প্রশ্নের যোগ করা হয়েছিল পরে আমি উত্তর দিলাম এটা সম্পর্কে প্রয়োজন @fishinear stackoverflow.com/posts/15499376/revisions
Nate কুক

10

আমি এই সমস্যাটি এইভাবে সমাধান করেছি।

  1. এর সাথে সেট করুন UIImageView(সহ UIViewContentModeScaleAspectFit)
  2. ইমেজ সাইজ পান (CGSize imageSize = imageView.image.size)
  3. UIImageView পুনরায় আকার দিন। [imageView sizeThatFits:imageSize]
  4. আপনি চান যেখানে অবস্থান সরাতে।

আমি ইউআইভিউয়ের শীর্ষের কেন্দ্রে রাখতে চেয়েছিলাম UICollectionViewCell। সুতরাং, আমি এই ফাংশনটি ব্যবহার করেছি।

- (void)setImageToCenter:(UIImageView *)imageView
{
    CGSize imageSize = imageView.image.size;
    [imageView sizeThatFits:imageSize];
    CGPoint imageViewCenter = imageView.center;
     imageViewCenter.x = CGRectGetMidX(self.contentView.frame);
    [imageView setCenter:imageViewCenter];
}

এটা আমার জন্য কাজ করে.


8

চিত্রটি দেখার চেয়ে বড় না হলে এই সাবক্লাসটি কেন্দ্র ব্যবহার করে, অন্যথায় এটি স্কেল করে les UIImageViewআকারের পরিবর্তনের জন্য আমি এটি দরকারী বলে মনে করেছি ।

এটি প্রদর্শিত ইমেজটি বড় আকারের দর্শন চেয়ে ছোট তবে ছোট আকারের দর্শন চেয়ে বড়। আমি এটি কেবল নিচে স্কেল করতে চান, কিন্তু না।

class CenterScaleToFitImageView: UIImageView {
    override var bounds: CGRect {
        didSet {
            adjustContentMode()
        }
    }

    override var image: UIImage? {
        didSet {
            adjustContentMode()
        }
    }

    func adjustContentMode() {
        guard let image = image else {
            return
        }
        if image.size.width > bounds.size.width ||
            image.size.height > bounds.size.height {
            contentMode = .ScaleAspectFit
        } else {
            contentMode = .Center
        }
    }
}

8

আপনি ইউআইভিউউকন্টেন্টমোডস্কেলএস্পেক্টফিলটিতে চিত্রের ভিউয়ের সামগ্রী মোড সেট করে এটি অর্জন করতে পারেন।

তারপরে পুনরায় আকারযুক্ত uiimage অবজেক্টটি পেতে নিম্নলিখিত পদ্ধতি পদ্ধতিটি ব্যবহার করুন।

- (UIImage*)setProfileImage:(UIImage *)imageToResize onImageView:(UIImageView *)imageView
{
    CGFloat width = imageToResize.size.width;
    CGFloat height = imageToResize.size.height;
    float scaleFactor;
    if(width > height)
    {
        scaleFactor = imageView.frame.size.height / height;
    }
    else
    {
        scaleFactor = imageView.frame.size.width / width;
    }

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), NO, 0.0);
    [imageToResize drawInRect:CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)];
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return resizedImage;
}

এখানে সম্পাদিত (সুইফট সংস্করণ)

func setProfileImage(imageToResize: UIImage, onImageView: UIImageView) -> UIImage
{
    let width = imageToResize.size.width
    let height = imageToResize.size.height

    var scaleFactor: CGFloat

    if(width > height)
    {
        scaleFactor = onImageView.frame.size.height / height;
    }
    else
    {
        scaleFactor = onImageView.frame.size.width / width;
    }

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), false, 0.0)
    imageToResize.drawInRect(CGRectMake(0, 0, width * scaleFactor, height * scaleFactor))
    let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return resizedImage;
}

7
[your_imageview setContentMode:UIViewContentModeCenter];

17
এটি স্কেলিং উপেক্ষা করবে
স্ক্রু

1
আমি জানি না কেন এর মতো সমাধানগুলি এতগুলি উত্স পেয়েছিল। এই ব্যক্তি স্পষ্টতই প্রশ্নটি পড়েনি।
ধীরে ধীরে

7
let bannerImageView = UIImageView();
bannerImageView.contentMode = .ScaleAspectFit;
bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);

ওপি যা চেয়েছিল তার বিপরীতে এটি চিত্রের চেয়ে ছোট হলে এটি চিত্রটিকে ফুটিয়ে তোলে।
ফিশিনিয়ার

2

লোকেদের জন্য ইউআইএমেজ পুনরায় আকার দেওয়ার জন্য,

@implementation UIImage (Resize)

- (UIImage *)scaledToSize:(CGSize)size
{
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
    [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

- (UIImage *)aspectFitToSize:(CGSize)size
{
    CGFloat aspect = self.size.width / self.size.height;
    if (size.width / aspect <= size.height)
    {
        return [self scaledToSize:CGSizeMake(size.width, size.width / aspect)];
    } else {
        return [self scaledToSize:CGSizeMake(size.height * aspect, size.height)];
    }
}

- (UIImage *)aspectFillToSize:(CGSize)size
{
    CGFloat imgAspect = self.size.width / self.size.height;
    CGFloat sizeAspect = size.width/size.height;

    CGSize scaledSize;

        if (sizeAspect > imgAspect) { // increase width, crop height
            scaledSize = CGSizeMake(size.width, size.width / imgAspect);
        } else { // increase height, crop width
            scaledSize = CGSizeMake(size.height * imgAspect, size.height);
        }
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClipToRect(context, CGRectMake(0, 0, size.width, size.height));
    [self drawInRect:CGRectMake(0.0f, 0.0f, scaledSize.width, scaledSize.height)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

@end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.