Частично проблема заключается в том, что вы изменяете возвращаемое значение метода доступа, а не используете установщик.
button.frame обманчива, это точечная запись, которая означает [button frame]
, которая возвращает struct CGRect
, который вы затем модифицируете, и изменения незаметно отбрасываются.
Для того, чтобы изменить фактический кадр, вам нужно вместо этого использовать метод установки [button setFrame:], для которого точечная запись по-прежнему button.frame
, но на этот раз как lvalue, поэтому button.frame =
не button.frame.something =
.
Если вы все еще получаете поведение при перемещении, отчасти это может быть связано с тем, что ваши новые значения X и Y не соответствуют старым, и, возможно, из-за какой-то ошибки ваши новые значения размера совпадают с старые. Попробуйте ширину 300 и высоту 300 только для ударов.