簡體   English   中英

UILabel Pixelated在iOS App中縮放

[英]UILabel Pixelated on Zoom in iOS App

我有一個UILabel ,它已添加到UIView並且此視圖作為UIScrollView子視圖添加,並且啟用了縮放。 一切正常,但當我放大UILabel和其他屬性時,這看起來也很奇怪。我還添加了以下代碼以實現靈活的尺寸。

    userResizableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
userResizableView.autoresizesSubviews = YES;

視圖上方是UIView類型。 下面是標簽的代碼

UILabel * lbl_FormFieldName = [[UILabel alloc]initWithFrame:CGRectMake(1, 1, rect.size.width, 15)];
lbl_FormFieldName.attributedText = attrText;

//    lbl_FormFieldName.text = text;
lbl_FormFieldName.autoresizingMask =  (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
lbl_FormFieldName.textColor = [UIColor blackColor];
lbl_FormFieldName.backgroundColor = [UIColor clearColor];
lbl_FormFieldName.font = customFont;
lbl_FormFieldName.numberOfLines = 0;
lbl_FormFieldName.baselineAdjustment = UIBaselineAdjustmentAlignBaselines; // or UIBaselineAdjustmentAlignCenters, or UIBaselineAdjustmentNone

lbl_FormFieldName.clipsToBounds = YES;
lbl_FormFieldName.textAlignment = NSTextAlignmentCenter;

請給我任何建議如何使自己好。 尋找建議。 謝謝

也許框架標簽使用的是浮點數。 嘗試以下操作為幀強制使用整數值:

[label setFrame:CGRectIntegral(label.frame)];
As per my requirement I have added pinch gesture on uilabel like this :

1. Add this line before implementation. 
CG_INLINE CGRect CGRectScale(CGRect rect, CGFloat wScale, CGFloat hScale)
{
    return CGRectMake(rect.origin.x * wScale, rect.origin.y * hScale, rect.size.width * wScale, rect.size.height * hScale);
}

2. Add gesture on label

UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidPinch:)];
pinch.delegate =self;
[self addGestureRecognizer:pinch];

3. Add method in your file. Add scrollview bounds instead of self.bounds as I have different scenario in my case.
- (void)viewDidPinch:(UIPinchGestureRecognizer*)sender
{

   CGFloat scale = sender.scale;

    CGRect scaleRect = CGRectScale(self.bounds, scale, scale);

       if (scaleRect.size.width >= 5 && scaleRect.size.height >= 5) {


           [self._label setAttributedText:[self getScaledStringFrom:self._label.attributedText withScale:scale]];

             [self._label setFrame:self.bounds];

    }
     sender.scale=1.0;

}

4. Rewrite text with new scale 
- (NSMutableAttributedString*) getScaledStringFrom:(NSMutableAttributedString*)string withScale:(CGFloat)scale
{
    [string beginEditing];
    [string enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, string.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
        if (value) {
            UIFont *oldFont = (UIFont *)value;
            UIFont *newFont = [oldFont fontWithSize:oldFont.pointSize * scale];
            [string removeAttribute:NSFontAttributeName range:range];
            [string addAttribute:NSFontAttributeName value:newFont range:range];
        }
    }];
    [string endEditing];
    return string;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM