motion/core/device/ios/screen.rb
module BubbleWrap
module Device
module Screen
module_function
# Certifies that the device running the app has a Retina display
# @return [TrueClass, FalseClass] true will be returned if the device has a Retina display, false otherwise.
def retina?(screen=UIScreen.mainScreen)
if screen.respondsToSelector('displayLinkWithTarget:selector:') && screen.scale == 2.0
true
else
false
end
end
# Figure out the current physical orientation of the device
# @return [:portrait, :portrait_upside_down, :landscape_left, :landscape_right, :face_up, :face_down, :unknown]
def orientation(device_orientation=UIDevice.currentDevice.orientation, fallback=true)
case device_orientation
when UIDeviceOrientationPortrait then :portrait
when UIDeviceOrientationPortraitUpsideDown then :portrait_upside_down
when UIDeviceOrientationLandscapeLeft then :landscape_left
when UIDeviceOrientationLandscapeRight then :landscape_right
when UIDeviceOrientationFaceUp then :face_up
when UIDeviceOrientationFaceDown then :face_down
else
# In some cases, the accelerometer can't get an accurate read of orientation so we fall back on the orientation of
# the status bar.
if fallback && (device_orientation != UIApplication.sharedApplication.statusBarOrientation)
orientation(UIApplication.sharedApplication.statusBarOrientation)
else
:unknown
end
end
end
# Figure out the current orientation of the interface
# @return [:portrait, :portrait_upside_down, :landscape_left, :landscape_right]
def interface_orientation(device_orientation=UIDevice.currentDevice.orientation, fallback=true)
case device_orientation
when UIInterfaceOrientationPortrait then :portrait
when UIInterfaceOrientationPortraitUpsideDown then :portrait_upside_down
when UIInterfaceOrientationLandscapeLeft then :landscape_left
when UIInterfaceOrientationLandscapeRight then :landscape_right
else
# In some cases, the accelerometer can't get an accurate read of orientation so we fall back on the orientation of
# the status bar.
if fallback && (device_orientation != UIApplication.sharedApplication.statusBarOrientation)
orientation(UIApplication.sharedApplication.statusBarOrientation)
else
:unknown
end
end
end
# The width of the device's screen.
# The real resolution is dependant on the scale
# factor (see `retina?`) but the coordinate system
# is in non-retina pixels. You can get pixel
# accuracy by using half-coordinates.
# This is a Float
def width
UIScreen.mainScreen.bounds.size.width
end
# The height of the device's screen.
# The real resolution is dependant on the scale
# factor (see `retina?`) but the coordinate system
# is in non-retina pixels. You can get pixel
# accuracy by using half-coordinates.
# This is a Float
def height
UIScreen.mainScreen.bounds.size.height
end
# The same as `.width` and `.height` but
# compensating for screen rotation (which
# can do your head in).
def width_for_orientation(o=orientation)
return height if (o == :landscape_left) || (o == :landscape_right)
width
end
# The same as `.width` and `.height` but
# compensating for screen rotation (which
# can do your head in).
def height_for_orientation(o=orientation)
return width if (o == :landscape_left) || (o == :landscape_right)
height
end
end
end
end