You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

66 lines
1.6 KiB

//
// TYDrawViewStorage.m
// TYAttributedLabelDemo
//
// Created by tanyang on 15/4/9.
// Copyright (c) 2015年 tanyang. All rights reserved.
//
#import "TYViewStorage.h"
@interface TYViewStorage ()
@property (nonatomic, weak) UIView *superView;
@end
@implementation TYViewStorage
#pragma mark - protocol
- (void)setView:(UIView *)view
{
_view = view;
if (CGSizeEqualToSize(self.size, CGSizeZero)) {
if ([NSThread isMainThread]) {
self.size = view.frame.size;
} else {
dispatch_semaphore_t signal = dispatch_semaphore_create(0);
dispatch_sync(dispatch_get_main_queue(), ^{
self.size = view.frame.size;
dispatch_semaphore_signal(signal);
});
dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);
}
}
}
- (void)setOwnerView:(UIView *)ownerView
{
if (_view.superview) {
[_view removeFromSuperview];
}
_superView = ownerView;
}
- (void)didNotDrawRun
{
[_view removeFromSuperview];
}
- (void)drawStorageWithRect:(CGRect)rect
{
if (_view == nil || _superView == nil) return;
// 设置frame 注意 转换rect CoreText context coordinates are the opposite to UIKit so we flip the bounds
CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformMakeTranslation(0, _superView.bounds.size.height), 1.f, -1.f);
rect = CGRectApplyAffineTransform(rect, transform);
[_view setFrame:rect];
[_superView addSubview:_view];
}
- (void)dealloc {
[self.view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:[NSThread isMainThread]];
}
@end