New file |
| | |
| | | // |
| | | // UIView+YYText.m |
| | | // YYText <https://github.com/ibireme/YYText> |
| | | // |
| | | // Created by ibireme on 13/4/3. |
| | | // Copyright (c) 2015 ibireme. |
| | | // |
| | | // This source code is licensed under the MIT-style license found in the |
| | | // LICENSE file in the root directory of this source tree. |
| | | // |
| | | |
| | | #import "UIView+YYText.h" |
| | | |
| | | // Dummy class for category |
| | | @interface UIView_YYText : NSObject @end |
| | | @implementation UIView_YYText @end |
| | | |
| | | |
| | | @implementation UIView (YYText) |
| | | |
| | | - (UIViewController *)yy_viewController { |
| | | for (UIView *view = self; view; view = view.superview) { |
| | | UIResponder *nextResponder = [view nextResponder]; |
| | | if ([nextResponder isKindOfClass:[UIViewController class]]) { |
| | | return (UIViewController *)nextResponder; |
| | | } |
| | | } |
| | | return nil; |
| | | } |
| | | |
| | | - (CGFloat)yy_visibleAlpha { |
| | | if ([self isKindOfClass:[UIWindow class]]) { |
| | | if (self.hidden) return 0; |
| | | return self.alpha; |
| | | } |
| | | if (!self.window) return 0; |
| | | CGFloat alpha = 1; |
| | | UIView *v = self; |
| | | while (v) { |
| | | if (v.hidden) { |
| | | alpha = 0; |
| | | break; |
| | | } |
| | | alpha *= v.alpha; |
| | | v = v.superview; |
| | | } |
| | | return alpha; |
| | | } |
| | | |
| | | - (CGPoint)yy_convertPoint:(CGPoint)point toViewOrWindow:(UIView *)view { |
| | | if (!view) { |
| | | if ([self isKindOfClass:[UIWindow class]]) { |
| | | return [((UIWindow *)self) convertPoint:point toWindow:nil]; |
| | | } else { |
| | | return [self convertPoint:point toView:nil]; |
| | | } |
| | | } |
| | | |
| | | UIWindow *from = [self isKindOfClass:[UIWindow class]] ? (id)self : self.window; |
| | | UIWindow *to = [view isKindOfClass:[UIWindow class]] ? (id)view : view.window; |
| | | if ((!from || !to) || (from == to)) return [self convertPoint:point toView:view]; |
| | | point = [self convertPoint:point toView:from]; |
| | | point = [to convertPoint:point fromWindow:from]; |
| | | point = [view convertPoint:point fromView:to]; |
| | | return point; |
| | | } |
| | | |
| | | - (CGPoint)yy_convertPoint:(CGPoint)point fromViewOrWindow:(UIView *)view { |
| | | if (!view) { |
| | | if ([self isKindOfClass:[UIWindow class]]) { |
| | | return [((UIWindow *)self) convertPoint:point fromWindow:nil]; |
| | | } else { |
| | | return [self convertPoint:point fromView:nil]; |
| | | } |
| | | } |
| | | |
| | | UIWindow *from = [view isKindOfClass:[UIWindow class]] ? (id)view : view.window; |
| | | UIWindow *to = [self isKindOfClass:[UIWindow class]] ? (id)self : self.window; |
| | | if ((!from || !to) || (from == to)) return [self convertPoint:point fromView:view]; |
| | | point = [from convertPoint:point fromView:view]; |
| | | point = [to convertPoint:point fromWindow:from]; |
| | | point = [self convertPoint:point fromView:to]; |
| | | return point; |
| | | } |
| | | |
| | | - (CGRect)yy_convertRect:(CGRect)rect toViewOrWindow:(UIView *)view { |
| | | if (!view) { |
| | | if ([self isKindOfClass:[UIWindow class]]) { |
| | | return [((UIWindow *)self) convertRect:rect toWindow:nil]; |
| | | } else { |
| | | return [self convertRect:rect toView:nil]; |
| | | } |
| | | } |
| | | |
| | | UIWindow *from = [self isKindOfClass:[UIWindow class]] ? (id)self : self.window; |
| | | UIWindow *to = [view isKindOfClass:[UIWindow class]] ? (id)view : view.window; |
| | | if (!from || !to) return [self convertRect:rect toView:view]; |
| | | if (from == to) return [self convertRect:rect toView:view]; |
| | | rect = [self convertRect:rect toView:from]; |
| | | rect = [to convertRect:rect fromWindow:from]; |
| | | rect = [view convertRect:rect fromView:to]; |
| | | return rect; |
| | | } |
| | | |
| | | - (CGRect)yy_convertRect:(CGRect)rect fromViewOrWindow:(UIView *)view { |
| | | if (!view) { |
| | | if ([self isKindOfClass:[UIWindow class]]) { |
| | | return [((UIWindow *)self) convertRect:rect fromWindow:nil]; |
| | | } else { |
| | | return [self convertRect:rect fromView:nil]; |
| | | } |
| | | } |
| | | |
| | | UIWindow *from = [view isKindOfClass:[UIWindow class]] ? (id)view : view.window; |
| | | UIWindow *to = [self isKindOfClass:[UIWindow class]] ? (id)self : self.window; |
| | | if ((!from || !to) || (from == to)) return [self convertRect:rect fromView:view]; |
| | | rect = [from convertRect:rect fromView:view]; |
| | | rect = [to convertRect:rect fromWindow:from]; |
| | | rect = [self convertRect:rect fromView:to]; |
| | | return rect; |
| | | } |
| | | |
| | | @end |