mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
move frame position conversion methods to ios namespace
This commit is contained in:
@@ -884,14 +884,6 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getPositionFromFrame(frame: any): { left, top, right, bottom } {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
public getFrameFromPosition(position: { left, top, right, bottom }, insets?: { left, top }): any {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
public getLocationInWindow(): Point {
|
public getLocationInWindow(): Point {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
10
tns-core-modules/ui/core/view/view.d.ts
vendored
10
tns-core-modules/ui/core/view/view.d.ts
vendored
@@ -531,16 +531,6 @@ export abstract class View extends ViewBase {
|
|||||||
*/
|
*/
|
||||||
public getSafeAreaInsets(): { left, top, right, bottom };
|
public getSafeAreaInsets(): { left, top, right, bottom };
|
||||||
|
|
||||||
/**
|
|
||||||
* Transforms iOS CGRect to a position object with left, top, right and bottom.
|
|
||||||
*/
|
|
||||||
public getPositionFromFrame(frame: any): { left, top, right, bottom };
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transforms a position object with left, top, right and bottom to an iOS CGRect.
|
|
||||||
*/
|
|
||||||
public getFrameFromPosition(position: { left, top, right, bottom }, insets?: { left, top }): any;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the location of this view in the window coordinate system.
|
* Returns the location of this view in the window coordinate system.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export class View extends ViewCommon {
|
|||||||
// on iOS 11+ it is possible to have a changed layout frame due to safe area insets
|
// on iOS 11+ it is possible to have a changed layout frame due to safe area insets
|
||||||
// get the frame and adjust the position, so that onLayout works correctly
|
// get the frame and adjust the position, so that onLayout works correctly
|
||||||
const frame = this.nativeViewProtected.frame;
|
const frame = this.nativeViewProtected.frame;
|
||||||
position = this.getPositionFromFrame(frame);
|
position = ios.getPositionFromFrame(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.onLayout(position.left, position.top, position.right, position.bottom);
|
this.onLayout(position.left, position.top, position.right, position.bottom);
|
||||||
@@ -192,7 +192,7 @@ export class View extends ViewCommon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const nativeView = this.nativeViewProtected;
|
const nativeView = this.nativeViewProtected;
|
||||||
const frame = this.getFrameFromPosition({ left, top, right, bottom });
|
const frame = ios.getFrameFromPosition({ left, top, right, bottom });
|
||||||
this._setNativeViewFrame(nativeView, frame);
|
this._setNativeViewFrame(nativeView, frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,8 +229,8 @@ export class View extends ViewCommon {
|
|||||||
const insets = this.getSafeAreaInsets();
|
const insets = this.getSafeAreaInsets();
|
||||||
|
|
||||||
if (insets.left || insets.top) {
|
if (insets.left || insets.top) {
|
||||||
const position = this.getPositionFromFrame(frame);
|
const position = ios.getPositionFromFrame(frame);
|
||||||
const adjustedFrame = this.getFrameFromPosition(position, insets);
|
const adjustedFrame = ios.getFrameFromPosition(position, insets);
|
||||||
return adjustedFrame;
|
return adjustedFrame;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -243,9 +243,9 @@ export class View extends ViewCommon {
|
|||||||
const onScreenLeft = layout.round(layout.toDevicePixels(locationOnScreen.x));
|
const onScreenLeft = layout.round(layout.toDevicePixels(locationOnScreen.x));
|
||||||
const onScreenTop = layout.round(layout.toDevicePixels(locationOnScreen.y));
|
const onScreenTop = layout.round(layout.toDevicePixels(locationOnScreen.y));
|
||||||
|
|
||||||
const position = this.getPositionFromFrame(frame);
|
const position = ios.getPositionFromFrame(frame);
|
||||||
const safeAreaPosition = this.getPositionFromFrame(safeArea);
|
const safeAreaPosition = ios.getPositionFromFrame(safeArea);
|
||||||
const fullscreenPosition = this.getPositionFromFrame(fullscreen);
|
const fullscreenPosition = ios.getPositionFromFrame(fullscreen);
|
||||||
|
|
||||||
const adjustedPosition = position;
|
const adjustedPosition = position;
|
||||||
|
|
||||||
@@ -287,26 +287,6 @@ export class View extends ViewCommon {
|
|||||||
return insets;
|
return insets;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getPositionFromFrame(frame: CGRect): { left, top, right, bottom } {
|
|
||||||
const left = layout.round(layout.toDevicePixels(frame.origin.x));
|
|
||||||
const top = layout.round(layout.toDevicePixels(frame.origin.y));
|
|
||||||
const right = layout.round(layout.toDevicePixels(frame.origin.x + frame.size.width));
|
|
||||||
const bottom = layout.round(layout.toDevicePixels(frame.origin.y + frame.size.height));
|
|
||||||
|
|
||||||
return { left, right, top, bottom };
|
|
||||||
}
|
|
||||||
|
|
||||||
public getFrameFromPosition(position: { left, top, right, bottom }, insets?: { left, top, right, bottom }): CGRect {
|
|
||||||
insets = insets || { left: 0, top: 0, right: 0, bottom: 0 };
|
|
||||||
|
|
||||||
const left = layout.round(layout.toDeviceIndependentPixels(position.left + insets.left));
|
|
||||||
const top = layout.round(layout.toDeviceIndependentPixels(position.top + insets.top));
|
|
||||||
const width = layout.round(layout.toDeviceIndependentPixels(position.right - position.left - insets.left - insets.right));
|
|
||||||
const height = layout.round(layout.toDeviceIndependentPixels(position.bottom - position.top - insets.top - insets.bottom));
|
|
||||||
|
|
||||||
return CGRectMake(left, top, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getLocationInWindow(): Point {
|
public getLocationInWindow(): Point {
|
||||||
if (!this.nativeViewProtected || !this.nativeViewProtected.window) {
|
if (!this.nativeViewProtected || !this.nativeViewProtected.window) {
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -772,13 +752,13 @@ export namespace ios {
|
|||||||
layoutGuide = initLayoutGuide(controller);
|
layoutGuide = initLayoutGuide(controller);
|
||||||
}
|
}
|
||||||
const safeArea = layoutGuide.layoutFrame;
|
const safeArea = layoutGuide.layoutFrame;
|
||||||
let position = owner.getPositionFromFrame(safeArea);
|
let position = ios.getPositionFromFrame(safeArea);
|
||||||
const safeAreaSize = safeArea.size;
|
const safeAreaSize = safeArea.size;
|
||||||
|
|
||||||
const hasChildViewControllers = controller.childViewControllers.count > 0;
|
const hasChildViewControllers = controller.childViewControllers.count > 0;
|
||||||
if (hasChildViewControllers) {
|
if (hasChildViewControllers) {
|
||||||
const fullscreen = controller.view.frame;
|
const fullscreen = controller.view.frame;
|
||||||
position = owner.getPositionFromFrame(fullscreen);
|
position = ios.getPositionFromFrame(fullscreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
const safeAreaWidth = layout.round(layout.toDevicePixels(safeAreaSize.width));
|
const safeAreaWidth = layout.round(layout.toDevicePixels(safeAreaSize.width));
|
||||||
@@ -793,6 +773,26 @@ export namespace ios {
|
|||||||
layoutParent(owner.parent);
|
layoutParent(owner.parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getPositionFromFrame(frame: CGRect): { left, top, right, bottom } {
|
||||||
|
const left = layout.round(layout.toDevicePixels(frame.origin.x));
|
||||||
|
const top = layout.round(layout.toDevicePixels(frame.origin.y));
|
||||||
|
const right = layout.round(layout.toDevicePixels(frame.origin.x + frame.size.width));
|
||||||
|
const bottom = layout.round(layout.toDevicePixels(frame.origin.y + frame.size.height));
|
||||||
|
|
||||||
|
return { left, right, top, bottom };
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getFrameFromPosition(position: { left, top, right, bottom }, insets?: { left, top, right, bottom }): CGRect {
|
||||||
|
insets = insets || { left: 0, top: 0, right: 0, bottom: 0 };
|
||||||
|
|
||||||
|
const left = layout.round(layout.toDeviceIndependentPixels(position.left + insets.left));
|
||||||
|
const top = layout.round(layout.toDeviceIndependentPixels(position.top + insets.top));
|
||||||
|
const width = layout.round(layout.toDeviceIndependentPixels(position.right - position.left - insets.left - insets.right));
|
||||||
|
const height = layout.round(layout.toDeviceIndependentPixels(position.bottom - position.top - insets.top - insets.bottom));
|
||||||
|
|
||||||
|
return CGRectMake(left, top, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
function layoutParent(view: ViewBase): void {
|
function layoutParent(view: ViewBase): void {
|
||||||
if (!view) {
|
if (!view) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user