Я хочу иметь подвижный / масштабируемый / вращающийся вид внутри другого вида. Внутренний вид может выходить за рамки внешнего вида, но я хочу сохранить его часть во внешнем, чтобы не потерять внутренний вид.
Я упростил проблему в этом проекте xcode https://github.com/nextorlg/Intersection.
Если бы внутренний вид был только подвижным и масштабируемым, проблема была бы уже решена, но когда внутренний вид поворачивает это решение, это не хорошо, потому что кадр содержит вид, но это не сам вид.
При каждом преобразовании, выполняемом для внутреннего вида, я использую эту функцию для проверки новой позиции вида. Если она недействительна, я возвращаю последнее преобразование (это код подвижного вида https://github.com/nextorlg/Intersection/blob/master/intersec/MovableView.m)
-(BOOL) validInset {
CGRect outerLimit = CGRectMake(0, 0, self.superview.frame.size.width, self.superview.frame.size.height);
CGRect intersectionRect = CGRectIntersection(self.frame, outerLimit);
NSLog(@"self.frame:%f,%f,%f,%f", self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
NSLog(@"outer.frame:%f,%f,%f,%f", outerLimit.origin.x, outerLimit.origin.y, outerLimit.size.width, outerLimit.size.height);
NSLog(@"intersec.frame:%f,%f,%f,%f", intersectionRect.origin.x, intersectionRect.origin.y, intersectionRect.size.width, intersectionRect.size.height);
NSLog(@"========================");
if ( CGRectIsNull(intersectionRect) ||
intersectionRect.size.width < INSET ||
intersectionRect.size.height < INSET ) {
return NO;
}
else {
return YES;
}
}
Вопрос в том, как я могу быть уверен, что внутренний вид не будет потерян за внешним видом, когда первый повернут на несколько (например, 45) градусов и утащен в угол?
Один комментарий, я хочу оставить только несколько пикселей внутри внешнего вида, потому что внутренний вид может быть больше (масштабирован), чем внешний.
Я рекомендую вам загрузить и запустить проект, чтобы лучше понять проблему, трудно понять это, просто прочитав это.
Спасибо!