我只是想创造一个完美的圆形图像。这是我的快速代码:
myImage.layer.cornerRadius = myImage.frame.size.width/2
myImage.layer.masksToBounds = true
这适用于4s,但在5s上不是很圆,在iphone 6上显示为圆角矩形。
我假设这与frame.size.width有关,以像素为单位返回值而不是像这样的东西,但我一直无法解决这个问题。
答案 0 :(得分:23)
如果您将该代码放入viewDidLoad
,请尝试将其移至viewDidLayoutSubviews
。
我猜它是一个自动布局问题 - 尽管您已经适当地使用了角半径属性,实际上是在自动布局后使图像框为圆形,角半径保持不变,但图像会拉伸,使其不再呈圆形。
答案 1 :(得分:2)
问题在于,如果您更改任意视图的cornerRadius,并期望它看起来像一个圆圈,则视图必须是正方形。
现在,由于设备不同,设备尺寸不同,图片视图的大小可能会发生变化,也可能是矩形。
例如 如果你认为是50 * 50
myImage.layer.cornerRadius = myImage.frame.size.width/2
这将在两侧添加25个角落无线电,使其成为一个圆圈。
但是由于设备更改的自动布局,您的视图可能是50 * 80
转角半径会增加25,但是当高度为80时,它会在两侧增加25,其余的30不会是曲线并且直视。
您可以尝试在故事板中以各种方向查看屏幕并更改自动布局约束(或结构和弹簧)以确保图像视图在所有设备中都是正方形
答案 2 :(得分:2)
如果您的代码位于viewDidLoad
中的ViewController
,请尝试将其移至viewDidLayoutSubviews
。
如果您的圆形imageView位于tableViewCell中,请尝试将其移至draw
。
override func draw(_ rect: CGRect) {
avatarView.layer.cornerRadius = avatarView.frame.size.width / 2
avatarView.layer.masksToBounds = true
avatarView.clipsToBounds = true
avatarView.contentMode = .scaleAspectFill
}
答案 3 :(得分:1)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:text="me"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
答案 4 :(得分:0)
这应该有效:
myImage.layer.cornerRadius = myImage.**bounds**.size.width/2
myImage.layer.masksToBounds = true